1(window.webpackJsonp=window.webpackJsonp||[]).push([[186,4,5,11,12,13,14,17,18,20,21,22,26,27,28,39,40,41,45,48,49,50,51,52,57,60,61,62,63,68,69,75,77,78,79,80,81,82,83,88,89,95,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183],Array(354).concat([function(e,t,n){"use strict";n.r(t);n(27);var r={name:"PaperPage",props:{useWithPaperPatches:{type:Boolean,default:!1},spacingStrategy:{type:String,validator:function(e){return["article","simple"].includes(e)},default:"article"}},computed:{applyPaperStyling:function(){return!1===this.useWithPaperPatches||this.showWindow},showWindow:function(){return this.$store.state.window.showWindow}}},o=n(430),l=n(2);var component=Object(l.a)(r,(function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"layer article",class:[e.$style.paperPage,e.showWindow?e.$style.externalWindow:"",e.applyPaperStyling?e.$style.applyPaperStyling:"","article"===e.spacingStrategy?e.$style.articleSpacing:e.$style.simpleSpacing]},[n("div",{staticClass:"layer",class:[e.$style.content]},[n("TextBlock",[e._t("default")],2)],1),e._v(" "),!1===e.useWithPaperPatches||e.showWindow?n("div",{staticClass:"layer"},[n("Card")],1):e._e()])}),[],!1,(function(e){this.$style=o.default.locals||o.default}),"4ee81994",null);t.default=component.exports;installComponents(component,{TextBlock:n(355).default,Card:n(154).default})},function(e,t,n){"use strict";n.r(t);
1var r={name:"TextBlock",computed:{classes:function(){return[this.$breakpoints.sm?"sm":null,this.$breakpoints.xl?"xl":null]}}},o=n(2),component=Object(o.a)(r,(function(){var e=this,t=e.$createElement;return(e._self._c||t)("div",{staticClass:"text",class:e.classes},[e._t("default")],2)}),[],!1,null,null,null);t.default=component.exports},function(e,t,n){"use strict";n.r(t);var r=n(79),o=n(485),l={name:"WindowElement",components:{Portal:r.Portal},props:{identifier:{type:String,default:function(){return Object(o.a)()}},mediaMetadata:{type:Array,default:function(){return[{source:n(436),fallbackSource:n(437),type:"video",title:"Flags in the wind",credit:{label:"Daniel Dyrda",to:""},year:"2019",license:{label:"Copyright Daniel Dyrda",to:""},caption:"This is an awesome caption."}]}},title:{type:String,default:void 0},caption:{type:String,default:void 0},useForCover:{type:Boolean,default:!1},showCaptionInFeed:{type:Boolean,default:!1},hideDividerInFeed:{type:Boolean,default:!1},usePortalForSingleColumn:{type:Boolean,default:!0},hideInFeed:{type:Boolean,default:!1},showSpaceInstead:{type:Boolean,default:!1},hideBakedSignature:{type:Boolean,default:!1},hideSignature:{type:Boolean,default:!0}},computed:{showWindow:function(){return this.$store.state.window.showWindow},isActive:function(){return this.$store.state.window.windowElement===this.identifier},resolvedTitle:function(){return this.title||this.mediaMetadata[0].title},resolvedCaption:function(){return this.caption||this.mediaMetadata[0].caption}},mounted:function(){""===this.$store.state.window.windowElement&&this.$store.commit("window/setActiveWindowElement",{identifier:this.identifier})},methods:{visibilityChanged:function(e,t){e&&this.setThisActive()},setThisActive:function(){this.$store.commit("window/setActiveWindowElement",{identifier:this.identifier})},getKey:function(){return Object(o.a)()}}},c=n(438),d=n(2);var component=Object(d.a)(l,(function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",[e.showWindow?n("div",{directives:[{name:"observe-visibility",rawName:"v-observe-visibility",value:{callback:e.visibilityChanged,intersection:{rootMargin:"-250px 0px -250px 0px",threshold:1},throttle:300},expression:"{\n callback: visibilityChanged,\n intersection: {\n rootMargin: '-250px 0px -250px 0px',\n threshold: 1.0,\n },\n throttle: 300,\n }"}],class:[e.$style.sensor,e.hideDividerInFeed?e.$style.hideInFeed:""],on:{click:e.setThisActive}},[!1===e.hideDividerInFeed?n("SubtleLayer",[n("div",[e.$slots.sensor?e._t("sensor"):n("LineDivider",{staticClass:"apply-subtle-layer",attrs:{direction:"horizontal",length:"full","use-highlighted-style":""}},[e.resolvedTitle?n("span",{class:e.$style.activeIndicator},[n("span",{class:e.$style.activeIndicator},[e._v("\n  "),e.isActive?void 0:[e._v("\n ·\n ")],e._v(" \n ")],2),e._v("\n "+e._s(e.resolvedTitle)+"  \n "),n("span",{class:e.$style.activeIndicator},[e.isActive?void 0:[e._v("\n ·\n ")],e._v(" \n ")],2)]):e._e()]),e._v(" "),e.showCaptionInFeed?n("div",{staticClass:"apply-subtle-layer",class:e.$style.inFeedCaption},[e._v("\n "+e._s(e.resolvedCaption)+"\n ")]):e._e()],2)]):e._e()],1):e._e(),e._v(" "),n("client-only",[e.showWindow&&e.isActive?n("Portal",{attrs:{to:"article-window",order:3}},[n("transition-group",{staticClass:"layer",attrs:{name:"window-fade",mode:"out-in",appear:!0,tag:"div"}},[n("div",{key:e.identifier,staticClass:"layer"},[n("MediaVessel",{attrs:{items:e.mediaMetadata,"use-hover-information":"","hide-baked-signature":e.hideBakedSignature,"hide-signature":!(e.mediaMetadata.length>1)&&e.hideSignature,"thumbnail-container-aspect-ratio":"landscape"}})],1)])],1):e._e(),e._v(" "),e.useForCover?n("Portal",{attrs:{to:"cover-banner"}},[n("MediaVessel",{attrs:{items:e.mediaMetadata,"use-hover-information":"","hide-baked-signature":e.hideBakedSignature,"hide-signature":!(e.mediaMetadata.length>1)&&e.hideSignature,"thumbnail-container-aspect-ratio":"landscape"}}
1)],1):e._e()],1),e._v(" "),!1===e.showWindow&&!1===e.hideInFeed?n("div",[n("Square",[n("Card",[n("MediaVessel",{attrs:{items:e.mediaMetadata,"use-hover-information":"","hide-baked-signature":e.hideBakedSignature,"hide-signature":!(e.mediaMetadata.length>1)&&e.hideSignature,"thumbnail-container-aspect-ratio":"landscape"}})],1)],1),e._v(" "),e.usePortalForSingleColumn?n("Portal",{attrs:{to:"in-feed-caption-"+e.identifier}},[n("SubtleLayer",[e.showCaptionInFeed?n("div",{staticClass:"apply-subtle-layer",class:[e.$style.inFeedCaption,e.$style.ported]},[n("b",[e._v(e._s(e.resolvedTitle)+"Â Â ")]),e._v(" "+e._s(e.resolvedCaption)+"\n ")]):e._e()])],1):n("SubtleLayer",[e.showCaptionInFeed?n("div",{staticClass:"apply-subtle-layer",class:e.$style.inFeedCaption},[n("b",[e._v(e._s(e.resolvedTitle)+"Â Â ")]),e._v(" "+e._s(e.resolvedCaption)+"\n ")]):e._e()])],1):!1===e.showWindow&&e.hideInFeed&&e.showSpaceInstead?[n("br"),e._v(" "),n("br"),e._v(" "),n("br")]:e._e()],2)}),[],!1,(function(e){this.$style=c.default.locals||c.default}),"9f2bddfa",null);t.default=component.exports;installComponents(component,{LineDivider:n(214).default,SubtleLayer:n(156).default,MediaVessel:n(394).default,Card:n(154).default,Square:n(358).default})},function(e,t,n){"use strict";n.r(t);n(27);var r={name:"PaperPatch",props:{spacingStrategy:{type:String,validator:function(e){return["article","simple"].includes(e)},default:"article"}},computed:{applyPaperStyling:function(){return!1===this.showWindow},showWindow:function(){return this.$store.state.window.showWindow}}},o=n(446),l=n(2);var component=Object(l.a)(r,(function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"layer content-sizing",class:[e.$style.paperPatch,e.showWindow?e.$style.externalWindow:"",e.applyPaperStyling?e.$style.applyPaperStyling:"","article"===e.spacingStrategy?e.$style.articleSpacing:e.$style.simpleSpacing]},[n("div",{staticClass:"layer",class:[e.$style.content]},[n("TextBlock",[e._t("default")],2)],1),e._v(" "),e.applyPaperStyling?n("div",{staticClass:"layer"},[n("Card")],1):e._e()])}),[],!1,(function(e){this.$style=o.default.locals||o.default}),"d41c9226",null);t.default=component.exports;installComponents(component,{TextBlock:n(355).default,Card:n(154).default})},function(e,t,n){"use strict";n.r(t);
1var r={name:"Square"},o=(n(399),n(2)),component=Object(o.a)(r,(function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"square"},[n("div",{staticClass:"content-wrapper"},[e._t("default")],2)])}),[],!1,null,"a9ac397e",null);t.default=component.exports},,function(e,t,n){var content=n(405);content.__esModule&&(content=content.default),"string"==typeof content&&(content=[[e.i,content,""]]),content.locals&&(e.exports=content.locals);(0,n(4).default)("a9feed48",content,!0,{sourceMap:!1})},function(e,t,n){var content=n(407);content.__esModule&&(content=content.default),"string"==typeof content&&(content=[[e.i,content,""]]),content.locals&&(e.exports=content.locals);(0,n(4).default)("2477a266",content,!0,{sourceMap:!1})},function(e,t,n){var content=n(409);content.__esModule&&(content=content.default),"string"==typeof content&&(content=[[e.i,content,""]]),content.locals&&(e.exports=content.locals);(0,n(4).default)("6c3260d4",content,!0,{sourceMap:!1})},function(e,t,n){"use strict";n.r(t);var r=n(155),o=n(410),l={name:"AugmentedKinesisElement",components:{MatchMedia:r.a,KinesisElement:o.b}},c=n(2),component=Object(c.a)(l,(function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("MatchMedia",{scopedSlots:e._u([{key:"default",fn:function(t){return[t.noHover?n("div",e._g(e._b({},"div",e.$attrs,!1),e.$listeners),[e._t("default")],2):n("KinesisElement",e._g(e._b({},"KinesisElement",e.$attrs,!1),e.$listeners),[e._t("default")],2)]}}],null,!0)})}),[],!1,null,"6bc2e92b",null);t.default=component.exports},function(e,t,n){var content=n(419);content.__esModule&&(content=content.default),"string"==typeof content&&(content=[[e.i,content,""]]),content.locals&&(e.exports=content.locals);(0,n(4).default)("0e8478b9",content,!0,{sourceMap:!1})},function(e,t,n){var content=n(423);content.__esModule&&(content=content.default),"string"==typeof content&&(content=[[e.i,content,""]]),content.locals&&(e.exports=content.locals);(0,n(4).default)("3b2d9423",content,!0,{sourceMap:!1})},function(e,t,n){var content=n(427);content.__esModule&&(content=content.default),"string"==typeof content&&(content=[[e.i,content,""]]),content.locals&&(e.exports=content.locals);(0,n(4).default)("3a283687",content,!0,{sourceMap:!1})},function(e,t,n){var content=n(431);content.__esModule&&(content=content.default),"string"==typeof content&&(content=[[e.i,content,""]]),content.locals&&(e.exports=content.locals);(0,n(4).default)("53ab255a",content,!0,{sourceMap:!1})},function(e,t,n){"use strict";n.r(t);n(26),n(23),n(31),n(38),n(39);var r=n(18),o=n(389);function l(object,e){var t=Object.keys(object);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(object);e&&(n=n.filter((function(e){return Object.getOwnPropertyDescriptor(object,e).enumerable}))),t.push.apply(t,n)}return t}var c=function(e){for(var i=1;i<arguments.length;i++){var source=null!=arguments[i]?arguments[i]:{};i%2?l(Object(source),!0).forEach((function(t){Object(r.a)(e,t,source[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(source)):l(Object(source)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(source,t))}))}return e}({name:"SimpleScrollingLayout",layout:"default",props:{metadata:{required:!0,type:Object}},beforeMount:function(){this.$store.commit("layout/setSlimLayout"),this.$store.commit("background/setSubtleBackgroun
1d")}},Object(o.a)()),d=c,m=n(592),h=n(2);var component=Object(h.a)(d,(function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{class:[e.$style.container,e.$breakpoints.xl?e.$style.magicMaxWidth:""]},[n("div",{staticClass:"visual-alignment-padding-for-rounded-corner-neighbours non-fullscreen-cover-top-margin",class:e.$style.headerContainer},[n("PageCover",{attrs:{metadata:e.metadata,medium:"","show-abstract":!1,"show-banner":!1,"show-utility-bar":!1,"use-vertical-layout":!1===e.$breakpoints.md}})],1),e._v(" "),n("div",{class:e.$style.contentContainer},[n("PaperPage",{attrs:{"spacing-strategy":"simple"}},[e._t("default")],2)],1)])}),[],!1,(function(e){this.$style=m.default.locals||m.default}),"5e288f46",null);t.default=component.exports;installComponents(component,{PageCover:n(403).default,PaperPage:n(354).default})},function(e,t,n){"use strict";n.r(t);var r={name:"ImageLayer",props:{src:{type:String,required:!0},alt:{type:String,required:!0},imageSize:{type:String,default:"contain"},roundBorder:{type:Boolean,default:!1}},computed:{style:function(){return{backgroundImage:"url(".concat(this.src,")")}}}},o=n(406),l=n(2);var component=Object(l.a)(r,(function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"layer",class:e.$style.imageLayer},[n("img",{class:[e.$style.imageElement,"cover"===e.imageSize?e.$style.cover:"","contain"===e.imageSize?e.$style.contain:"","auto"===e.imageSize?e.$style.auto:"",e.roundBorder?e.$style.roundBorder:""],attrs:{src:e.src,alt:e.alt},on:{click:function(e){e.stopPropagation()}}})])}),[],!1,(function(e){this.$style=o.default.locals||o.default}),"32bc83d4",null);t.default=component.exports},function(e,t,n){"use strict";n.r(t);n(26),n(23),n(31),n(38),n(39);var r=n(7),o=n(18),l=(n(27),n(15),n(40),n(216),n(389)),c=n(359),d=n(80);function m(object,e){var t=Object.keys(object);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(object);e&&(n=n.filter((function(e){return Object.getOwnPropertyDescriptor(object,e).enumerable}))),t.push.apply(t,n)}return t}var h=function(e){for(var i=1;i<arguments.length;i++){var source=null!=arguments[i]?arguments[i]:{};i%2?m(Object(source),!0).forEach((function(t){Object(o.a)(e,t,source[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(source)):m(Object(source)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(source,t))}))}return e}({name:"SimpleProjectLayout",layout:"default",props:{metadata:{type:Object,required:!0},layoutVariation:{type:String,default:"default",validator:function(e){return["default","gallery"].includes(e)}}},created:function(){this.GITHUB_URL=d.a,this.LINKEDIN_URL=d.b},computed:{hasSmallTileOneSlot:function(){return!!this.$slots["small-tile-one"]},hasExternalProjectLink:function(){return void 0!==this.metadata.project.identity.externalProjectUrl&&""!==this.metadata.project.identity.externalProjectUrl},hasSmallTileTwoSlot:function(){return!!this.$slots["small-tile-two"]},hasSmallTileThreeSlot:function(){return!!this.$slots["small-tile-three"]},hasSmallTileFourSlot:function(){return!!this.$slots["small-tile-four"]},hasHugeTileSlot:function(){return!!this.$slots["huge-tile"]},showPreviewThree:function(){return"xxl"===this.$breakpoints.is||"xl"===this.$breakpoints.is||"lg"===this.$breakpoints.is||"md"===this.$breakpoints.is||"sm"===this.$breakpoints.is},showMoreListEntriesOnCards:function(){return"xxl"===this.$breakpoints.is||"sm"===this.$breakpoints.is},reelMetadata:function(){return Object(c.e)(this.metadata.project)},showWindow:function(){return this.$store.state.window.showWindow}},methods:{getMoreProjectsItemSpecification:function(){var e=this.metadata.project.categories.values[0],t=[{key:"games",value:{title:"More Games",description:"Check out my other game projects",to:"/games"}},{key:"art",value:{title:"More Art",description:"Check out my other art projects",to:"/art"}},{key:"design",value:{title:"More Design",description:"Check out my other design projects",to:"/design"}},{key:"technology",value:{title:"More Technology",description:"Check out my other technology projects",to:"/technology"}},{key:"science",value:{title:"More Science",description:"Check out my other science projects",to:"/science"}}],n=t.findIndex((function(t){return t.key===e}));if(n>-1){var o=t.splice(n,1),l=Object(r.a)(o,1)[0];t.unshift(l)}return t}},beforeMount:function(){this.$store.commit("layout/setWideLayout"),this.$store.commit("background/setSubtleBackgroun
1d")}},Object(l.a)()),f=h,v=n(480),y=n(2);var component=Object(y.a)(f,(function(){var e=this,t=e.$createElement,r=e._self._c||t;return r("div",{class:[e.$style.container,e.showWindow?e.$style.windowView:""]},[r("div",{staticClass:"visual-alignment-padding-for-rounded-corner-neighbours",class:[e.$style.cover]},[r("client-only",[r("PageCover",{attrs:{metadata:e.metadata,medium:"","show-abstract":!1,"show-banner":!0,"use-icon":"","show-utility-bar":!0,"use-vertical-layout":!1===e.$breakpoints.xl,"auto-width":""}})],1)],1),e._v(" "),r("Portal",{attrs:{to:"cover-banner"}},[r("div",{class:e.$style.iconMediaWrapper},[r("MediaVessel",{attrs:{items:[{source:e.metadata.project.promotion.icon.source,type:"image"}],"hide-signature":"","no-lightroom-view":"","load-always":""}})],1)]),e._v(" "),r("PaperFeedLayout",{attrs:{metadata:e.metadata},scopedSlots:e._u([{key:"default",fn:function(){return[e._t("default")]},proxy:!0},{key:"below-paper-feed",fn:function(){return[r("div",{class:[e.$style.nextSteps]},[r("div",{class:[e.$style.gridItem,e.$style.previewOne]},[e._t("small-tile-one"),e._v(" "),!1===e.hasSmallTileOneSlot?[e.hasExternalProjectLink?r("ExternalProjectPageCard",{attrs:{metadata:e.metadata}}):r("ProjectPinCard",{attrs:{to:"/about/",title:"About Me",icon:n(476),"hide-description":"","fitty-size-factor":1}})]:e._e()],2),e._v(" "),r("div",{class:[e.$style.gridItem,e.$style.previewTwo]},[e._t("small-tile-two"),e._v(" "),!1===e.hasSmallTileTwoSlot?r("DirectoriesPreviewCard",{attrs:{items:[Object.assign({},e.getMoreProjectsItemSpecification()[0].value),Object.assign({},e.getMoreProjectsItemSpecification()[1].value)].concat(e.showMoreListEntriesOnCards?[Object.assign({},e.getMoreProjectsItemSpecification()[2].value)]:[]),"reference-sizes":"simpleProjectLayoutDefault"}}
1):e._e()],2),e._v(" "),e.showPreviewThree?r("div",{class:[e.$style.gridItem,e.$style.previewThree]},[e._t("small-tile-three"),e._v(" "),!1===e.hasSmallTileThreeSlot?r("DirectoriesPreviewCard",{attrs:{items:[{title:"Collaborate",description:"Let's create something together.",to:"/collaborate"}].concat(e.showMoreListEntriesOnCards?[{title:"GitHub",description:"Projects on GitHub.",to:e.GITHUB_URL}]:[],[{title:"Contact",description:"Tell me about your project.",to:"/contact"}]),"reference-sizes":"simpleProjectLayoutDefault"}}):e._e()],2):e._e()])]},proxy:!0}],null,!0)})],1)}),[],!1,(function(e){this.$style=v.default.locals||v.default}),"5baa0a83",null);t.default=component.exports;installComponents(component,{PageCover:n(403).default,MediaVessel:n(394).default,ExternalProjectPageCard:n(479).default,ProjectPinCard:n(388).default,DirectoriesPreviewCard:n(435).default,PaperFeedLayout:n(415).default})},function(e,t,n){var content=n(439);content.__esModule&&(content=content.default),"string"==typeof content&&(content=[[e.i,content,""]]),content.locals&&(e.exports=content.locals);(0,n(4).default)("a87028e4",content,!0,{sourceMap:!1})},function(e,t,n){var content=n(441);content.__esModule&&(content=content.default),"string"==typeof content&&(content=[[e.i,content,""]]),content.locals&&(e.exports=content.locals);(0,n(4).default)("32d76f2f",content,!0,{sourceMap:!1})},function(e,t,n){var content=n(443);content.__esModule&&(content=content.default),"string"==typeof content&&(content=[[e.i,content,""]]),content.locals&&(e.exports=content.locals);(0,n(4).default)("560f411a",content,!0,{sourceMap:!1})},function(e,t,n){var content=n(447);content.__esModule&&(content=content.default),"string"==typeof content&&(content=[[e.i,content,""]]),content.locals&&(e.exports=content.locals);(0,n(4).default)("9d8b9c04",content,!0,{sourceMap:!1})},function(e,t,n){var content=n(453);content.__esModule&&(content=content.default),"string"==typeof content&&(content=[[e.i,content,""]]),content.locals&&(e.exports=content.locals);(0,n(4).default)("90897f1a",content,!0,{sourceMap:!1})},function(e,t,n){var content=n(455);content.__esModule&&(content=content.default),"string"==typeof content&&(content=[[e.i,content,""]]),content.locals&&(e.exports=content.locals);(0,n(4).default)("42fdb6f3",content,!0,{sourceMap:!1})},function(e,t,n){var content=n(458);content.__esModule&&(content=content.default),"string"==typeof content&&(content=[[e.i,content,""]]),content.locals&&(e.exports=content.locals);(0,n(4).default)("ded57750",content,!0,{sourceMap:!1})},function(e,t,n){var content=n(460);content.__esModule&&(content=content.default),"string"==typeof content&&(content=[[e.i,content,""]]),content.locals&&(e.exports=content.locals);(0,n(4).default)("7e9e7634",content,!0,{sourceMap:!1})},function(e,t,n){var content=n(462);content.__esModule&&(content=content.default),"string"==typeof content&&(content=[[e.i,content,""]]),content.locals&&(e.exports=content.locals);(0,n(4).default)("52527020",content,!0,{sourceMap:!1})},function(e,t,n){var content=n(465);content.__esModule&&(content=content.default),"string"==typeof content&&(content=[[e.i,content,""]]),content.locals&&(e.exports=content.locals);(0,n(4).default)("96b8a6e4",content,!0,{sourceMap:!1})},function(e,t,n){var content=n(467);content.__esModule&&(content=content.default),"string"==typeof content&&(content=[[e.i,content,""]]),content.locals&&(e.exports=content.locals);(0,n(4).default)("7626c309",content,!0,{sourceMap:!1})},function(e,t,n){var content=n(473);content.__esModule&&(content=content.default),"string"==typeof content&&(content=[[e.i,content,""]]),content.locals&&(e.exports=content.locals);(0,n(4).default)("260c01a5",content,!0,{sourceMap:!1})},function(e,t,n){var content=n(478);content.__esModule&&(content=content.default),"string"==typeof content&&(content=[[e.i,content,""]]),content.locals&&(e.exports=content.locals);(0,n(4).default)("3a3fe2d2",content,!0,{sourceMap:!1})},function(e,t,n){var content=n(481);content.__esModule&&(content=content.default),"string"==typeof content&&(content=[[e.i,content,""]]),content.locals&&(e.exports=content.locals);(0,n(4).default)("4d7222a3",content,!0,{sourceMap:!1})},function(e,t,n){"use strict";n.r(t);n(64);var r=n(155),o=n(154),l=n(363),c={name:"InteractiveCard",components:{AugmentedKinesisContainer:n(391).default,AugmentedKinesisElement:l.default,Card:o.default,MatchMedia:r.a},props:{hideBorder:{type:Boolean},darkBorder:{type:Boolean},sizeFactor:{type:Number},kinesisStrength:{type:Number,default:15}},data:function(){return{hover:!1}},computed:{computedClasses:function(){return{hover:this.hover}}},methods:{setHover:function(e){var t=this.hover;this.hover=e,t!==e&&this.$emit("on-state-change",e)}}},d=(n(412),n(2)),component=Object(d.a)(c,(function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("MatchMedia",{scopedSlots:e._u([{key:"default",fn:function(t){var r=t.noHover;return[n("AugmentedKinesisContainer",{staticClass:"directory-card-kinesis-parent",attrs:{duration:531}},[n("AugmentedKinesisElement",{staticClass:"directory-card-kinesis-child",attrs:{type:"depth",strength:e.$responsive.motion.reduced||r||!1===e.$breakpoints.md?0:.75*e.kinesisStrength}},[n("div",e._g({staticClass:"layer animation-layer scale-on-page-transition"},e.$listeners),[n("Card",{staticClass:"wrapper",class:e.computedClasses,attrs:{highlighted:e.hover,"size-factor":e.sizeFactor,"hide-border":e.hideBorder,"dark-border":e.darkBorder},on:{mouseover:function(t){return e.setHover(!1===r)},mouseleave:function(t){return e.setHover(!1)}}},[n("div",{staticClass:"layer content"},[e._t("default")],2)])],1)])],1)]}}],null,!0)})}),[],!1,null,"43140e54",null);t.default=component.exports;installComponents(component,{Card:n(154).default,AugmentedKinesisElement:n(363).default,AugmentedKinesisContainer:n(391).default})},function(e,t,n){var content=n(400);
1content.__esModule&&(content=content.default),"string"==typeof content&&(content=[[e.i,content,""]]),content.locals&&(e.exports=content.locals);(0,n(4).default)("05beb840",content,!0,{sourceMap:!1})},function(e,t,n){"use strict";n.r(t);var r=n(80),o={name:"ArtGalleryProjectLayout",props:{galleryItems:{type:Array,required:!0},metadata:{type:Object,required:!0}},computed:{galleryCardSizeFactor:function(){return"xxl"===this.$breakpoints.is?4.5:"xl"===this.$breakpoints.is?2:"lg"===this.$breakpoints.is||"md"===this.$breakpoints.is?4.5:2}},created:function(){this.MASTODON_URL=r.c}},l=n(2),component=Object(l.a)(o,(function(){var e=this,t=e.$createElement;return(e._self._c||t)("SimpleProjectLayout",{attrs:{metadata:e.metadata,"layout-variation":"gallery"}},[e._t("default")],2)}),[],!1,null,null,null);t.default=component.exports;installComponents(component,{SimpleProjectLayout:n(370).default})},function(e,t,n){"use strict";n.r(t);var r=n(110),o=n(158),l={name:"ProjectPinCard",components:{ExternalLinkSymbol:n.n(o).a},inject:["mediaQueries"],props:{to:{type:String},title:{type:String},description:{type:String},titleColor:{type:String,default:""},icon:{type:String},iconShadow:{type:Boolean,default:!0},backgroundImage:{type:String,default:""},round:{type:Boolean,default:!1},noPeriod:{type:Boolean,default:!1},hideDescription:{type:Boolean,default:!1},fittySizeFactor:{}},data:function(){return{isHovered:!1}},computed:{isExternalLink:function(){return!1===Object(r.a)(this.to)}}},c=n(477),d=n(2);var component=Object(d.a)(l,(function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("Hyperlink",{attrs:{to:e.to,"do-not-apply-styling":""}},[n("InteractiveCard",{on:{mouseenter:function(){e.isHovered=!0},mouseleave:function(){e.isHovered=!1}}},[n("Square",[n("Fitty",{attrs:{"size-factor":e.fittySizeFactor}},[n("div",{staticClass:"layer"},[""!==e.backgroundImage?n("div",{staticClass:"layer"},[n("ImageLayer",{attrs:{alt:"A background image",src:e.backgroundImage}})],1):e._e(),e._v(" "),n("div",{staticClass:"layer card-padding",class:e.$style.container},[n("div",{class:e.$style.image},[n("DepthWindowEffectLayer",{attrs:{"translation-strength":10}},[n("div",{class:[e.$style["pin-image-container"],e.round?e.$style.round:"",e.iconShadow?e.$style.iconShadow:""]},[n("div",{staticClass:"layer",class:e.$style["image-area"]},[n("ImageLayer",{attrs:{src:e.icon,alt:"Banner image of "+e.title,"image-size":"contain"}})],1)])])],1),e._v(" "),n("h3",{class:[e.$style.title,e.hideDescription?e.$style.noDescription:""],style:""!==e.titleColor?{color:e.titleColor}:{}},[e._v("\n "+e._s(e.title)),!1===e.noPeriod?n("span",[e._v(".")]):e._e(),e._v(" "),e.isExternalLink?n("span",[n("b",{class:e.$style.externalLinkIcon},[n("ExternalLinkSymbol",{class:e.$style.svgWrapper})],1)]):e._e()]),e._v(" "),!1===e.hideDescription&&!1===e.$responsive.motion.reduced&&!1===e.mediaQueries.noHover?n("p",{class:[e.$style.description,e.isHovered?e.$style.show:""]},[e._v("\n "+e._s(e.description)+"\n ")]):e._e(),e._v(" "),n("div",{class:e.$style.dot})])])])],1)],1)],1)}),[],!1,(function(e){this.$style=c.default.locals||c.default}),"ad56fc84",null);t.default=component.exports;installComponents(component,{ImageLayer:n(369).default,DepthWindowEffectLayer:n(421).default,Fitty:n(396).default,Square:n(358).default,InteractiveCard:n(385).default,Hyperlink:n(63).default})},function(e,t,n){"use strict";n.d(t,"a",(function(){return o}));var r=n(359);function o(){return{head:function(){return e=this.metadata,{title:Object(r.q)(e),meta:[{hid:Object(r.n)(e),name:Object(r.r)(e),content:Object(r.p)(e)}]};var e}}}},function(e,t,n){"use strict";n.r(t);var r=n(18),o=(n(58),n(32),n(31),n(81),n(19),n(26),n(23),n(38),n(39),n(359)),l=n(82);function c(object,e){var t=Object.keys(object);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(object);e&&(n=n.filter((function(e){return Object.getOwnPropertyDescriptor(object,e).enumerable}))),t.push.apply(t,n)}return t}var d={name:"Breadcrumbs",props:{metadata:{type:Object},title:{type:String,default:null}},data:function(){return{expandCollapsed:!1}},computed:{crumbs:function(){var e=this,t=(this.$route.path||"/").split("#")[0],n=(t=t.replace(/\/+$/,"")||"/").split("/").filter(
1Boolean),l={routes:[],categories:[]},path="";return n.forEach((function(param){path="".concat(path,"/").concat(param);var t=e.$router.match(path);t&&null!=t.name||(t=e.$router.match(path+"/")),null!==t.name&&l.routes.push(function(e){for(var i=1;i<arguments.length;i++){var source=null!=arguments[i]?arguments[i]:{};i%2?c(Object(source),!0).forEach((function(t){Object(r.a)(e,t,source[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(source)):c(Object(source)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(source,t))}))}return e}({title:param.replace(/-/g," ")},t)),void 0!==e.metadata&&void 0!==e.metadata.categories&&void 0!==Object(o.f)(e.metadata)&&(l.categories=Object(o.f)(e.metadata))})),l.routes[l.routes.length-1].title=l.routes[l.routes.length-1].title.split("#")[0],l.routes.pop(),l},showCollapsed:function(){var e,t;return null!==(e=this.metadata)&&void 0!==e&&null!==(t=e.categories)&&void 0!==t&&t.showCollapsed?!1===this.expandCollapsed:!this.$breakpoints.xl&&((this.$breakpoints.md&&this.getCrumbLength(this.crumbs)>4||this.$breakpoints.sm&&this.getCrumbLength(this.crumbs)>3||this.getCrumbLength(this.crumbs)>3)&&!1===this.expandCollapsed)}},created:function(){this.HOSTNAME=l.a},beforeMount:function(){"undefined"!=typeof window&&window.addEventListener("resize",this.resetExpandCollapsed)},destroyed:function(){"undefined"!=typeof window&&window.removeEventListener("resize",this.resetExpandCollapsed)},methods:{getCrumbLength:function(e){return e.routes.length+e.categories.length},resetExpandCollapsed:function(){this.expandCollapsed=!1}}},m=d,h=n(404),f=n(2);var component=Object(f.a)(m,(function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("ol",{attrs:{typeof:"BreadcrumbList"}},[n("li",{attrs:{property:"itemListElement",typeof:"ListItem"}},[n("Hyperlink",{attrs:{property:"item",typeof:"WebPage",to:"/"}},[n("span",{attrs:{property:"name"}},[e._v(e._s(e.HOSTNAME))])]),e._v(" "),n("meta",{attrs:{property:"position",content:"1"}})],1),e._v(" "),n("li",{directives:[{name:"show",rawName:"v-show",value:e.crumbs.categories.length>0&&!1===e.showCollapsed,expression:"crumbs.categories.length > 0 && showCollapsed === false"}],attrs:{property:"itemListElement",typeof:"ListItem"}},e._l(e.crumbs.categories,(function(t,r){return n("span",{key:r},[n("span",{directives:[{name:"show",rawName:"v-show",value:0!==r,expression:"index !== 0"}]},[e._v(" ⢠")]),e._v(" "),n("Hyperlink",{attrs:{to:"/"+t}}
1,[n("span",[e._v(e._s(t))])])],1)})),0),e._v(" "),n("li",{directives:[{name:"show",rawName:"v-show",value:e.showCollapsed,expression:"showCollapsed"}],attrs:{property:"itemListElement",typeof:"ListItem"}},[n("span",{staticClass:"highlightable interactable-text",on:{click:function(t){return e.expandCollapsed=!0}}},[e._v(" ·â·â·")])]),e._v(" "),e._l(e.crumbs.routes,(function(t,r){return n("li",{directives:[{name:"show",rawName:"v-show",value:!1===e.showCollapsed||r===e.crumbs.routes.length-1,expression:"showCollapsed === false || index === crumbs.routes.length - 1"}],key:r,attrs:{property:"itemListElement",typeof:"ListItem"}},[n("Hyperlink",{attrs:{property:"item",typeof:"WebPage",to:t.path,"aria-current":r===e.crumbs.routes.length-1?"page":void 0}},[n("span",{attrs:{property:"name"}},[e._v("\n "+e._s(e.$route.fullPath===t.path&&null!==e.title?e.title:t.title)+"\n ")])]),e._v(" "),n("meta",{attrs:{property:"position",content:r+2}})],1)}))],2)}),[],!1,(function(e){this.$style=h.default.locals||h.default}),"4a480e33",null);t.default=component.exports;installComponents(component,{Hyperlink:n(63).default})},function(e,t,n){"use strict";n.r(t);var r=n(155),o=n(410),l={name:"AugmentedKinesisContainer",components:{MatchMedia:r.a,KinesisContainer:o.a}},c=n(2),component=Object(c.a)(l,(function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("MatchMedia",{scopedSlots:e._u([{key:"default",fn:function(t){return[t.noHover?n("div",e._g(e._b({},"div",e.$attrs,!1),e.$listeners),[e._t("default")],2):n("KinesisContainer",e._g(e._b({},"KinesisContainer",e.$attrs,!1),e.$listeners),[e._t("default")],2)]}}],null,!0)})}),[],!1,null,"7b3bbab5",null);t.default=component.exports},function(e,t,n){var content=n(413);content.__esModule&&(content=content.default),"string"==typeof content&&(content=[[e.i,content,""]]),content.locals&&(e.exports=content.locals);(0,n(4).default)("dc94b7fa",content,!0,{sourceMap:!1})},function(e,t,n){var content=n(417);content.__esModule&&(content=content.default),"string"==typeof content&&(content=[[e.i,content,""]]),content.locals&&(e.exports=content.locals);(0,n(4).default)("c5e5992e",content,!0,{sourceMap:!1})},function(e,t,n){"use strict";n.r(t);var r=n(485),o={name:"MediaVessel",props:{identifier:{type:String,default:function(){return Object(r.a)()}},items:{type:Array,required:!0},noLightroomView:{type:Boolean,default:!1},useHoverInformation:{type:Boolean,default:!1},useOverlayInformation:{type:Boolean,default:!1},loadAlways:{type:Boolean,default:!1},hideBakedSignature:{type:Boolean,default:!1},hideSignature:{type:Boolean,default:!1},thumbnailContainerAspectRatio:{type:String,default:""},containerAspectRatio:{type:String,default:""}},data:function(){return{infoToggled:!1,iAmOverlayActive:!1}},computed:{itemsCount:function(){return this.items.length},isSingleItem:function(){return 1===this.itemsCount},useSideBySideLayout:function(){return this.useOverlayInformation&&this.$breakpoints.xxl},showOverlayInfoPanel:function(){return this.useSideBySideLayout||this.infoToggled},lightroomActive:function(){return this.$store.state.overlay.show}},mounted:function(){document.addEventListener("keydown",this.handleKeys)},beforeDestroy:function(){document.removeEventListener("keydown",this.handleKeys),this.deactivateLightroom()},methods:{activateLightroom:function(){this.noLightroomView||(this.$store.commit("slideshow/setSlideshowCurrent",{identifier:this.identifier+"-overlay",current:this.$store.getters["slideshow/getSlideshowCurrent"](this.identifier+"-element")}),this.$store.commit("overlay/showOverlay"),this.iAmOverlayActive=!0)},deactivateLightroom:function(){this.$store.commit("overlay/hideOverlay")},getSourceForThumbnail:function(e){return e.thumbnail?e.thumbnail.src:e.src},getAltForThumbnail:function(e){return e.thumbnail?e.thumbnail.alt:e.alt},getSourceForLightroomItem:function(e){return e.src},getAltForLightroomItem:function(e){return e.alt},getSlotName:function(e){return"item-"+e},handleKeys:function(e){27===e.keyCode&&this.deactivateLightroom()},handleInfoToggle:function(){this.infoToggled=!1===this.infoToggled},resetInfoToggle:function(){this.infoToggled=!1},nextOverlaySlide:function(){this.$store.commit("slideshow/nextSlide",{identifier:this.identifier+"-overlay"})}}
1,watch:{lightroomActive:function(e){this.resetInfoToggle(),!1===e&&(this.iAmOverlayActive=!1)}}},l=n(472),c=(n(474),n(2));var component=Object(c.a)(o,(function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"layer"},[n("div",{staticClass:"layer",class:e.$style.mediaElement},[n("MediaInteractionGateLayer",{attrs:{"media-metadata":e.items[0],"load-always":e.loadAlways||!1===e.isSingleItem,"image-size":"cover"}},[n("HoverOverlayLayer",{attrs:{active:e.useHoverInformation,"on-click":e.activateLightroom},scopedSlots:e._u([{key:"content",fn:function(){return[e.isSingleItem?n("div",{staticClass:"layer",class:[e.$style.slideshow,e.hideBakedSignature?e.$style.hideBakedSignature:""]},[n("MediaAsset",{attrs:{"media-metadata":e.items[0],"use-hover-information":e.useHoverInformation,"content-size":e.items[0].contentSize?e.items[0].contentSize:"contain","is-thumbnail":"","on-click":e.activateLightroom,"container-aspect-ratio":e.thumbnailContainerAspectRatio}})],1):n("div",{staticClass:"layer",class:[e.$style.slideshow,e.hideBakedSignature?e.$style.hideBakedSignature:""]},[n("Slideshow",{attrs:{"slideshow-identifier":e.identifier+"-element","transition-style":"fade","transition-delay":!1,"item-count":e.items.length},scopedSlots:e._u([e._l(e.items,(function(t,i){return{key:e.getSlotName(i),fn:function(){return[n("MediaAsset",{key:i,attrs:{"media-metadata":t,"use-hover-information":e.useHoverInformation,"content-size":"cover","is-thumbnail":"","on-click":e.activateLightroom,"container-aspect-ratio":e.thumbnailContainerAspectRatio}})]},proxy:!0}}))],null,!0)})],1)]},proxy:!0},{key:"hover-overlay",fn:function(){return[n("div",{staticClass:"layer"},[n("Slideshow",{attrs:{"slideshow-identifier":e.identifier+"-element","transition-style":"fade","transition-delay":!1,"item-count":e.items.length,"hide-backdrop":""},scopedSlots:e._u([e._l(e.items,(function(t,i){return{key:e.getSlotName(i),fn:function(){return[n("MediaInformation",e._g({key:i,attrs:{"media-metadata":t,"show-inspect-icon":""}},e.$listeners))]},proxy:!0}}))],null,!0)})],1)]},proxy:!0}])}),e._v(" "),n("div",{staticClass:"layer",class:e.$style.controls},[!1===e.isSingleItem?n("div",{staticClass:"layer",class:e.$style.progressBar},[n("SlideshowProgressBar",{attrs:{"slideshow-identifier":e.identifier+"-element","deactivate-auto-play":e.lightroomActive},on:{click:e.activateLightroom}})],1):e._e(),e._v(" "),!1===e.hideSignature?n("div",{staticClass:"layer no-interaction",class:e.$style.signature},[n("SignatureLayer")],1):e._e()])],1)],1),e._v(" "),e.lightroomActive&&e.iAmOverlayActive?n("Portal",{attrs:{to:"overlay"}},[n("div",{staticClass:"layer",class:[e.$style.lightroom],on:{click:function(t){return t.stopPropagation(),e.deactivateLightroom.apply(null,arguments)}}},[n("div",{class:e.$style.upperControls},[n("div",{staticClass:"layer"},[n("div",{class:e.$style.closeButtonWrapper},[n("Button",{staticClass:"galleryCloseButton",attrs:{text:"",rounded:""},on:{click:e.deactivateLightroom}},[n("span",{staticClass:"closeCaption subtle dark"},[e._v("close")]),e._v(" "),n("span",[e._v("â")])])],1)])]),e._v(" "),n("div",{class:e.$style.lowerControls,on:{click:function(e){e.stopPropagation()}}},[n("div",{staticClass:"layer",class:[e.$style.slideshowControlsWrapper,e.lightroomActive?e.$style.show:""]},[!1===e.isSingleItem?n("SlideshowControls",{attrs:{"slideshow-identifier":e.identifier+"-overlay"}}):e._e(),e._v(" "),e.useOverlayInformation&&!1===e.useSideBySideLayout?n("div",{staticClass:"layer",class:[e.$style.infoToggle,e.infoToggled?e.$style.toggled:""]},[n("Card",{attrs:{"border-radius":"99px"}},[n("div",{class:e.$style.controls,on:{click:e.handleInfoToggle}},[(e.infoToggled,n("div",{class:[e.$style.caption]},[e._v("\n â¹ï¸\n ")]))])])],1):e._e()],1)]),e._v(" "),n("div",{class:[e.$style.content,e.useSideBySideLayout?e.$style.useSideBySideLayout:""]},[e.useSideBySideLayout?n("div",{class:e.$style.divider},[n("div",{staticClass:"layer",class:e.$style.slot},[n("DividerLine",{attrs:{direction:"vertical",dark:""}}
1)],1)]):e._e(),e._v(" "),n("div",{staticClass:"layer",class:[e.$style.mediaContainer,e.useSideBySideLayout||!1===e.showOverlayInfoPanel?e.$style.active:e.$style.inactive]},[n("div",{staticClass:"layer"},[e.isSingleItem?n("div",{staticClass:"layer"},[n("MediaAsset",{attrs:{"media-metadata":e.items[0],"content-size":"video"===e.items[0].type?"auto":"contain","round-border":"","load-always":""}})],1):n("Slideshow",{attrs:{"slideshow-identifier":e.identifier+"-overlay","transition-style":"fadeHorizontally","hide-backdrop":"","item-count":e.items.length},scopedSlots:e._u([e._l(e.items,(function(t,i){return{key:e.getSlotName(i),fn:function(){return[n("div",{key:i,staticClass:"layer",class:e.$style.lightroomCarouselItemImageWrapper},[n("div",{staticClass:"layer",class:e.$style.lightroomCarouselItemImageSlot,on:{click:e.nextOverlaySlide}},[n("MediaAsset",{key:i,attrs:{"media-metadata":t,"content-size":"video"===t.type?"auto":"contain","round-border":"","load-always":""}})],1)])]},proxy:!0}}))],null,!0)})],1)]),e._v(" "),e.useOverlayInformation?n("div",{staticClass:"layer",class:[e.$style.mediaInformationContainer,e.showOverlayInfoPanel?e.$style.active:e.$style.inactive]},[n("Slideshow",{attrs:{"slideshow-identifier":e.identifier+"-overlay","item-count":e.items.length,"transition-style":e.useSideBySideLayout?"fade":"fadeHorizontally","hide-backdrop":"","transition-delay":!1===e.useSideBySideLayout,"is-secondary":""},scopedSlots:e._u([e._l(e.items,(function(t,i){return{key:e.getSlotName(i),fn:function(){return[n("div",{key:i,staticClass:"layer",class:e.$style.slotContainer},[n("div",{class:e.$style.slot},[n("MediaInformation",{attrs:{"media-metadata":t,"show-divider-line":!1}}),e._v(" "),!1===e.useSideBySideLayout?n("div",{class:e.$style.additionalContent},[n("DividerLine",{attrs:{direction:"horizontal",dark:"","full-length":""}}),e._v(" "),n("div",{staticClass:"text dark subtle highlightable interactable-text",class:e.$style.showMediaButton,on:{click:e.handleInfoToggle}},[e._v("Hide info and show Media")])],1):e._e()],1)])]},proxy:!0}}))],null,!0)})],1):e._e()])])]):e._e()],1)}),[],!1,(function(e){this.$style=l.default.locals||l.default}),"70cc3bc6",null);t.default=component.exports;installComponents(component,{MediaAsset:n(433).default,Slideshow:n(468).default,MediaInformation:n(434).default,HoverOverlayLayer:n(428).default,SlideshowProgressBar:n(469).default,SignatureLayer:n(470).default,MediaInteractionGateLayer:n(432).default,Button:n(402).default,SlideshowControls:n(471).default,Card:n(154).default,DividerLine:n(211).default})},function(e,t,n){var content=n(425);content.__esModule&&(content=content.default),"string"==typeof content&&(content=[[e.i,content,""]]),content.locals&&(e.exports=content.locals);(0,n(4).default)("4a7822dc",content,!0,{sourceMap:!1})},function(e,t,n){"use strict";n.r(t);n(64);var r=n(51),o={name:"Fitty",props:{sizeFactor:{type:Number,default:1},maxFontSize:{type:Number,default:999}},data:function(){return{referenceWidth:200}},computed:{contentID:function(){return"textfit-"+this._uid},style:function(){return{fontSize:Math.min(this.maxFontSize,this.referenceWidth/15.75)+"px"}}},created:function(){"undefined"!=typeof window&&(window.addEventListener("resize",Object(r.a)(this.calculateWidth,110)),window.setTimeout(this.calculateWidth,10),this.calculateWidth())},beforeDestroy:function(){"undefined"!=typeof window&&window.removeEventListener("resize",this.calculateWidth)},methods:{calculateWidth:function(){this.referenceWidth=this.$refs[this.contentID]?this.$refs[this.contentID].clientWidth/this.sizeFactor:this.referenceWidth}}},l=n(418),c=n(2);var component=Object(c.a)(o,(function(){var e=this,t=e.$createElement;return(e._self._c||t)("div",{ref:e.contentID,class:e.$style.mainwrap,style:e.style,attrs:{id:e.contentID}},[e._t("default")],2)}),[],!1,(function(e){this.$style=l.default.locals||l.default}),"f88cf8b0",null);t.default=component.exports},function(e,t,n){var content=n(445);content.__esModule&&(content=content.default),"string"==typeof content&&(content=[[e.i,content,""]]),content.locals&&(e.exports=content.locals);(0,n(4).default)("6817160f",content,!0,{sourceMap:!1})},function(e,t,n){"use strict";n.r(t);n(64);
1var r={name:"DirectoriesListLayer",props:{items:{type:Array},fittySizeFactor:{type:Number},fittyMaxFontSize:{type:Number},onDarkBackground:{type:Boolean,default:!1},fixDoubleLine:{},minNumberOfRows:{type:Number,default:1}},computed:{numberOfProjects:function(){return Math.max(this.items.length,this.minNumberOfRows)},numberOfFillers:function(){return this.items.length>=this.minNumberOfRows?0:this.minNumberOfRows-this.items.length}}},o=n(454),l=n(2);var component=Object(l.a)(r,(function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"layer",class:[e.$style.wrapper,e.$breakpoints.md?e.$style.md:"",e.$breakpoints.sm?e.$style.sm:""]},[n("Fitty",{attrs:{"size-factor":e.fittySizeFactor,"max-font-size":e.fittyMaxFontSize}},[n("div",{staticClass:"card-padding card-grid-gap",class:e.$style.container,style:{"--numberOfProjects":e.numberOfProjects}},[e._l(e.items,(function(t){return n("DetailedLink",{key:t.title,attrs:{to:t.to||"/",header:t.title,description:t.description,"hide-description":t.hideDescriptionInDirectoryListView,"directory-indicator":!1,"left-border":"",lowercase:!1,"on-dark-background":e.onDarkBackground,"fix-double-line":e.fixDoubleLine}})})),e._v(" "),e._l(e.numberOfFillers,(function(i){return n("div",{key:i,class:e.$style.filler})}))],2)])],1)}),[],!1,(function(e){this.$style=o.default.locals||o.default}),"5a8556ba",null);t.default=component.exports;installComponents(component,{DetailedLink:n(215).default,Fitty:n(396).default})},function(e,t,n){"use strict";n(386)},function(e,t,n){var r=n(3)(!1);r.push([e.i,".square[data-v-a9ac397e]{position:relative;width:100%;padding-top:100%}.content-wrapper[data-v-a9ac397e]{position:absolute;top:0;width:100%;height:100%;min-height:100%;display:grid;grid-template-columns:100%;grid-template-rows:100%}",""]),e.exports=r},function(e,t,n){var content=n(475);content.__esModule&&(content=content.default),"string"==typeof content&&(content=[[e.i,content,""]]),content.locals&&(e.exports=content.locals);(0,n(4).default)("3449ff81",content,!0,{sourceMap:!1})},,function(e,t,n){"use strict";n.r(t);var r=n(79),o=n(359),l={name:"PageCover",components:{PortalTarget:r.PortalTarget},props:{metadata:{type:Object,required:!1},useVerticalLayout:{type:Boolean,default:!1},showBanner:{type:Boolean,default:!0},useIcon:{type:Boolean,default:!1},showUtilityBar:{type:Boolean,default:!0},showAbstract:{type:Boolean,default:!0},medium:{type:Boolean,default:!1},small:{type:Boolean,default:!1},autoWidth:{type:Boolean,default:!1},useWindowStyle:{type:Boolean,default:!1}},computed:{title:function(){return Object(o.r)(this.metadata)},abstract:function(){return Object(o.m)(this.metadata)},projectMetadata:function(){return Object(o.s)(this.metadata)},showWindow:function(){return this.$store.state.window.showWindow}}},c=n(408),d=n(2);var component=Object(d.a)(l,(function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("SubtleLayer",{attrs:{active:""}},[n("div",{class:[e.$style.container,e.useVerticalLayout?e.$style.singleColumn:"",e.showBanner?e.$style.fixHeight:e.$style.noBanner,e.useIcon?e.$style.iconHeight:"",e.showAbstract?"":e.$style.noAbstract,e.autoWidth?e.$style.autoWidth:""]},[e.showBanner?n("div",{class:[e.$style.banner,e.useIcon?e.$style.icon:""]},[n("Square",[n("Card",{attrs:{"border-radius":e.useIcon?"25%":void 0}},[n("PortalTarget",{attrs:{name:"cover-banner"}})],1)],1)],1):e._e(),e._v(" "),n("div",{class:[e.$style.titleArea,e.medium?e.$style.medium:""]},[n("div",{class:e.$style.breadcrumbsWrapper},[n("Breadcrumbs",{staticClass:"apply-subtle-layer",attrs:{metadata:e.projectMetadata}})],1),e._v(" "),n("h1",{class:[e.$style.title,e.title.length>38?e.$style.longTitle:""]},[e._v("\n "+e._s(e.title)+"\n ")]),e._v(" "),n("div",{class:[e.$style.dividerWrapper,e.$style.upperDivider]},[n("DividerLine",{attrs:{direction:"horizontal","full-length":!0}})],1),e._v(" "),e.showAbstract?[n("div",{class:e.$style.whitespace}),e._v(" "),n("p",{staticClass:"text",class:e.$style.abstract},[e._v("\n "+e._s(e.abstract)+"\n ")]),e._v(" "),n("div",{class:e.$style.whitespace}),e._v(" "),n("div",{class:[e.$style.dividerWrapper,e.$style.lowerDivider]},[n("DividerLine",{attrs:{direction:"horizontal","full-length":!0}})],1)]:e._e(),e._v(" "),e.showUtilityBar?n("div",{class:e.$style.utilityBar},[n("UtilityBar",{staticClass:"apply-subtle-layer",attrs:{metadata:e.metadata}}
1)],1):e._e()],2)])])}),[],!1,(function(e){this.$style=c.default.locals||c.default}),"c21f0c08",null);t.default=component.exports;installComponents(component,{Card:n(154).default,Square:n(358).default,Breadcrumbs:n(390).default,DividerLine:n(211).default,UtilityBar:n(414).default,SubtleLayer:n(156).default})},function(e,t,n){"use strict";var r=n(360),o=n.n(r);n.d(t,"default",(function(){return o.a}))},function(e,t,n){var r=n(3)(!1);r.push([e.i,'[data-v-4a480e33]:export{sm:640;md:768;lg:1024;xl:1280;xxl:1736;vLg:900;zIndexForeground:600;zIndexBase:0;zIndexBackground:-300;zIndexBackdrop:300;zIndexPage:1300;zindexSecondaryNavigation:3300;zIndexPrimaryNavigation:4300;zIndexCurtain:5300;zIndexFullScreenFeatures:6300;zIndexModals:7300;zIndexNotifications:8300;zIndexBlocker:9300}ol[data-v-4a480e33]{list-style:none}li[data-v-4a480e33],li[data-v-4a480e33]:after{display:inline}li[data-v-4a480e33]:after{content:" / ";font-size:.9em;color:#aaa;opacity:1;padding:0 .0725em 0 .15em}li[data-v-4a480e33]:last-child:after{content:""}li a[data-v-4a480e33]{text-decoration-color:var(--text-decoration-color)}li a[data-v-4a480e33],li a.nuxt-link-exact-active--\\[Frida\\]_HQZb.nuxt-link-active--\\[Frida\\]_\\+FuK[data-v-4a480e33]{color:var(--text-color)}',""]),r.locals={"nuxt-link-exact-active":"nuxt-link-exact-active--[Frida]_HQZb","nuxt-link-active":"nuxt-link-active--[Frida]_+FuK"},e.exports=r},function(e,t,n){"use strict";var r=n(361),o=n.n(r);n.d(t,"default",(function(){return o.a}))},function(e,t,n){var r=n(3)(!1);r.push([e.i,"[data-v-32bc83d4]:export{sm:640;md:768;lg:1024;xl:1280;xxl:1736;vLg:900;zIndexForeground:600;zIndexBase:0;zIndexBackground:-300;zIndexBackdrop:300;zIndexPage:1300;zindexSecondaryNavigation:3300;zIndexPrimaryNavigation:4300;zIndexCurtain:5300;zIndexFullScreenFeatures:6300;zIndexModals:7300;zIndexNotifications:8300;zIndexBlocker:9300}.imageLayer--\\[Frida\\]_OUda[data-v-32bc83d4]{width:100%;height:100%;display:flex;justify-content:center;align-items:center}.imageElement--\\[Frida\\]_kGX3[data-v-32bc83d4]{background-repeat:no-repeat;background-position:50%;object-position:center}.imageElement--\\[Frida\\]_kGX3.roundBorder--\\[Frida\\]_C89s[data-v-32bc83d4]{border-radius:var(--media-border-radius)}.imageElement--\\[Frida\\]_kGX3.cover--\\[Frida\\]_BMGt[data-v-32bc83d4]{background-size:cover;object-fit:cover;width:100%;height:100%}.imageElement--\\[Frida\\]_kGX3.contain--\\[Frida\\]_FsNE[data-v-32bc83d4]{background-size:contain;object-fit:contain;max-width:100%;max-height:100%}.imageElement--\\[Frida\\]_kGX3.auto--\\[Frida\\]_Oqwv[data-v-32bc83d4]{background-size:auto}",""]),r.locals={imageLayer:"imageLayer--[Frida]_OUda",imageElement:"imageElement--[Frida]_kGX3",roundBorder:"roundBorder--[Frida]_C89s",cover:"cover--[Frida]_BMGt",contain:"contain--[Frida]_FsNE",auto:"auto--[Frida]_Oqwv"},e.exports=r},function(e,t,n){"use strict";var r=n(362),o=n.n(r);n.d(t,"default",(function(){return o.a}))},function(e,t,n){var r=n(3)(!1);r.push([e.i,'[data-v-c21f0c08]:export{sm:640;md:768;lg:1024;xl:1280;xxl:1736;vLg:900;zIndexForeground:600;zIndexBase:0;zIndexBackground:-300;zIndexBackdrop:300;zIndexPage:1300;zindexSecondaryNavigation:3300;zIndexPrimaryNavigation:4300;zIndexCurtain:5300;zIndexFullScreenFeatures:6300;zIndexModals:7300;zIndexNotifications:8300;zIndexBlocker:9300}.container--\\[Frida\\]_TXdi[data-v-c21f0c08]{width:100%;margin:auto;display:grid;grid-template-columns:auto auto;grid-template-rows:auto;grid-row-gap:0;grid-column-gap:0;grid-template-areas:"banner title"}.container--\\[Frida\\]_TXdi.fixHeight--\\[Frida\\]_G7Ik[data-v-c21f0c08]{grid-template-rows:370px}.container--\\[Frida\\]_TXdi.iconHeight--\\[Frida\\]_r-4f[data-v-c21f0c08]{grid-template-rows:auto;grid-template-columns:182px auto}.container--\\[Frida\\]_TXdi.noBanner--\\[Frida\\]_bZ3B[data-v-c21f0c08]{grid-template-columns:0 auto}.container--\\[Frida\\]_TXdi.singleColumn--\\[Frida\\]_7rdJ[data-v-c21f0c08]{grid-template-columns:auto;grid-template-rows:auto auto;grid-template-areas:"banner" "title";height:auto;grid-row-gap:0;grid-column-gap:0;padding-left:calc(var(--grid-spacing)/2);padding-right:calc(var(--grid-spacing)/2)}
1.container--\\[Frida\\]_TXdi.singleColumn--\\[Frida\\]_7rdJ.noBanner--\\[Frida\\]_bZ3B[data-v-c21f0c08]{grid-template-rows:0 auto}.container--\\[Frida\\]_TXdi.singleColumn--\\[Frida\\]_7rdJ.iconHeight--\\[Frida\\]_r-4f[data-v-c21f0c08]{grid-template-columns:auto;grid-template-rows:222px auto}.container--\\[Frida\\]_TXdi.autoWidth--\\[Frida\\]_mRvE[data-v-c21f0c08]{width:auto}.titleArea--\\[Frida\\]_vLtY[data-v-c21f0c08]{grid-area:title;justify-content:center;width:100%}.titleArea--\\[Frida\\]_vLtY[data-v-c21f0c08],.titleAreaContainer--\\[Frida\\]_fO-v[data-v-c21f0c08]{display:flex;flex-direction:column}.titleAreaContainer--\\[Frida\\]_fO-v[data-v-c21f0c08]{flex-grow:1}.banner--\\[Frida\\]_dbCz[data-v-c21f0c08]{grid-area:banner;width:360px;margin-right:36px}.banner--\\[Frida\\]_dbCz.icon--\\[Frida\\]_NWP-[data-v-c21f0c08]{width:130px;margin-right:52px}.singleColumn--\\[Frida\\]_7rdJ .banner--\\[Frida\\]_dbCz[data-v-c21f0c08]{width:100%;margin-right:0;margin-bottom:36px}.singleColumn--\\[Frida\\]_7rdJ .banner--\\[Frida\\]_dbCz.icon--\\[Frida\\]_NWP-[data-v-c21f0c08]{width:100px;margin:auto}.breadcrumbsWrapper--\\[Frida\\]_MR42[data-v-c21f0c08]{width:100%;min-height:1em;margin-bottom:.7em}.smaller--\\[Frida\\]_m0by .breadcrumbsWrapper--\\[Frida\\]_MR42[data-v-c21f0c08]{margin-bottom:.4em}.title--\\[Frida\\]_gTRS[data-v-c21f0c08]{min-height:1em;line-height:1.2em;-webkit-margin-before:0;-webkit-margin-after:0;letter-spacing:1px;margin-bottom:11.2px;vertical-align:baseline;font-size:1.8em}.medium--\\[Frida\\]_gqJE .title--\\[Frida\\]_gTRS[data-v-c21f0c08]{font-size:1.5em}.title--\\[Frida\\]_gTRS.longTitle--\\[Frida\\]_Il9M[data-v-c21f0c08]{letter-spacing:0;font-size:1.2em;line-height:1.2em}.smaller--\\[Frida\\]_m0by .title--\\[Frida\\]_gTRS[data-v-c21f0c08]{font-size:1.2em}@media(min-width:768px){.title--\\[Frida\\]_gTRS[data-v-c21f0c08]{font-size:2.1em;letter-spacing:2px}.medium--\\[Frida\\]_gqJE .title--\\[Frida\\]_gTRS[data-v-c21f0c08]{font-size:2em}.title--\\[Frida\\]_gTRS.longTitle--\\[Frida\\]_Il9M[data-v-c21f0c08]{letter-spacing:0;font-size:1.8em}.smaller--\\[Frida\\]_m0by .title--\\[Frida\\]_gTRS[data-v-c21f0c08]{font-size:1.4em}}.utilityBar--\\[Frida\\]_9Gsg[data-v-c21f0c08]{width:100%;display:flex;flex-direction:row;margin-top:.5em}.noAbstract--\\[Frida\\]_USYJ .utilityBar--\\[Frida\\]_9Gsg[data-v-c21f0c08],.singleColumn--\\[Frida\\]_7rdJ .utilityBar--\\[Frida\\]_9Gsg[data-v-c21f0c08]{margin-top:0}.abstract--\\[Frida\\]_x0s5[data-v-c21f0c08]{font-size:16px;line-height:1.7;flex-grow:0;margin-top:1em;margin-bottom:1em;font-weight:300;text-align:justify;column-count:2;column-gap:40px;overflow:hidden}@media(min-width:1280px){.abstract--\\[Frida\\]_x0s5[data-v-c21f0c08]{line-height:1.6}}.fixHeight--\\[Frida\\]_G7Ik .abstract--\\[Frida\\]_x0s5[data-v-c21f0c08]{height:50%;column-fill:auto}.singleColumn--\\[Frida\\]_7rdJ .abstract--\\[Frida\\]_x0s5[data-v-c21f0c08]{column-count:1;height:auto;margin-top:10px;margin-bottom:10px}.whitespace--\\[Frida\\]_gvc4[data-v-c21f0c08]{flex-grow:0}.dotWrapper--\\[Frida\\]_\\+4eT[data-v-c21f0c08]{margin-left:.5em;margin-right:.5em}.dividerWrapper--\\[Frida\\]_BwVD[data-v-c21f0c08]{display:flex;flex-direction:column;justify-content:center;margin-top:0;margin-bottom:0}',""]),r.locals={container:"container--[Frida]_TXdi",fixHeight:"fixHeight--[Frida]_G7Ik",iconHeight:"iconHeight--[Frida]_r-4f",noBanner:"noBanner--[Frida]_bZ3B",singleColumn:"singleColumn--[Frida]_7rdJ",autoWidth:"autoWidth--[Frida]_mRvE",titleArea:"titleArea--[Frida]_vLtY",titleAreaContainer:"titleAreaContainer--[Frida]_fO-v",banner:"banner--[Frida]_dbCz",icon:"icon--[Frida]_NWP-",breadcrumbsWrapper:"breadcrumbsWrapper--[Frida]_MR42",smaller:"smaller--[Frida]_m0by",title:"title--[Frida]_gTRS",medium:"medium--[Frida]_gqJE",longTitle:"longTitle--[Frida]_Il9M",utilityBar:"utilityBar--[Frida]_9Gsg",noAbstract:"noAbstract--[Frida]_USYJ",abstract:"abstract--[Frida]_x0s5",whitespace:"whitespace--[Frida]_gvc4",dotWrapper:"dotWrapper--[Frida]_+4eT",dividerWrapper:"dividerWrapper--[Frida]_BwVD"},e.exports=r},,function(e,t,n){var r=n(5);r(r.S,"Number",{MAX_SAFE_INTEGER:9007199254740991})},function(e,t,n){"use strict";n(392)},function(e,t,n){var r=n(3)(!1);
1r.push([e.i,"[data-v-43140e54]:export{sm:640;md:768;lg:1024;xl:1280;xxl:1736;vLg:900;zIndexForeground:600;zIndexBase:0;zIndexBackground:-300;zIndexBackdrop:300;zIndexPage:1300;zindexSecondaryNavigation:3300;zIndexPrimaryNavigation:4300;zIndexCurtain:5300;zIndexFullScreenFeatures:6300;zIndexModals:7300;zIndexNotifications:8300;zIndexBlocker:9300}.directory-card-nuxt-link[data-v-43140e54]{text-decoration:none}.directory-card-kinesis-child[data-v-43140e54],.directory-card-kinesis-parent[data-v-43140e54]{width:100%;height:100%;position:relative;pointer-events:none}.wrapper[data-v-43140e54]{width:100%;height:100%;position:relative;pointer-events:all;cursor:pointer}",""]),e.exports=r},,function(e,t,n){"use strict";n.r(t);var r=n(79),o=n(359),l=(n(389),{name:"PaperFeedLayout",components:{PortalTarget:r.PortalTarget},props:{metadata:{type:Object,required:!0}},data:function(){return{coverIsVisible:!0}},computed:{projectMetadata:function(){return Object(o.s)(this.metadata)},showWindow:function(){return this.$store.state.window.showWindow},scrolled:function(){return this.$responsive.scroll.scrolled},scrolledAtLeastOneCover:function(){return this.$responsive.scroll.scrolledAtLeastOneCover},scrolledToEnd:function(){return this.$responsive.scroll.scrolledToEnd},pageMetadata:function(){return this.metadata?Object(o.o)(this.metadata):""},viewportCharacteristics:function(){return{breakpoint:this.$breakpoints.is,landscape:this.$responsive.orientation.landscape}},hasAbstract:function(){return void 0!==Object(o.m)(this.metadata)&&!1!==Object(o.m)(this.metadata)&&""!==Object(o.m)(this.metadata)},title:function(){return Object(o.r)(this.metadata)}},watch:{scrolled:function(e){e?this.$store.commit("background/setSubtleBackgroun
1d"):this.showWindow?this.$store.commit("background/setNormalBackground"):this.$store.commit("background/setSubtleBackground")},viewportCharacteristics:function(){this.handleViewportChanges()}},beforeMount:function(){!1===this.scrolled?this.$store.commit("background/setNormalBackground"):this.$store.commit("background/setSubtleBackground"),this.$store.commit("window/clearActiveWindowElement"),this.$store.commit("layout/setFreeLayout")},mounted:function(){this.handleViewportChanges()},methods:{coverVisibilityChanged:function(e,t){this.coverIsVisible=e},handleViewportChanges:function(){this.$breakpoints.xl&&this.$responsive.orientation.landscape?this.$store.commit("window/show"):(this.$store.commit("window/hide"),this.$store.commit("background/setSubtleBackground"))}}}),c=n(422),d=(n(424),n(2));var component=Object(d.a)(l,(function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{class:[e.$style.container,e.showWindow?e.$style.windowView:""]},[n("div",{class:[e.$style.feed]},[n("PaperFeed",[e._t("default")],2),e._v(" "),e._t("below-paper-feed")],2),e._v(" "),n("div",{directives:[{name:"show",rawName:"v-show",value:e.showWindow,expression:"showWindow"}],class:[e.$style.window]},[n("SubtleLayer",{attrs:{"sizing-reference":"content"}},[n("div",{staticClass:"ignore-subtle-layer",class:e.$style.windowContainer},[n("div",{staticClass:"visual-alignment-padding-for-rounded-corner-neighbours ignore-subtle-layer",class:[e.scrolledAtLeastOneCover?e.$style.active:"",e.$style.windowFrame,e.$style.upper]},[n("div",{class:[e.$style.windowFrameElement,e.$style.third,e.$style.breadcrumbs]},[n("Breadcrumbs",{staticClass:"apply-subtle-layer",attrs:{metadata:e.projectMetadata}})],1),e._v(" "),n("div",{class:[e.$style.windowFrameElement,e.$style.second,e.$style.title]},[n("h2",{staticClass:"apply-subtle-layer",class:[e.$style.title]},[e._v("\n â "+e._s(e.title)+"\n ")])]),e._v(" "),n("div",{class:[e.$style.upper,e.$style.windowFrameElement,e.$style.first]},[n("DividerLine",{attrs:{"full-length":!0,direction:"horizontal"}})],1)]),e._v(" "),n("div",{staticClass:"ignore-subtle-layer"},[n("Square",[n("Card",[n("client-only",[n("PortalTarget",{attrs:{name:"article-window"}})],1)],1)],1)],1),e._v(" "),n("div",{staticClass:"ignore-subtle-layer visual-alignment-padding-for-rounded-corner-neighbours",class:[e.scrolledAtLeastOneCover?e.$style.active:"",e.$style.windowFrame,e.$style.lower]},[n("div",{class:[e.$style.windowFrameElement,e.$style.first]},[n("DividerLine",{attrs:{"full-length":!0,direction:"horizontal"}})],1),e._v(" "),n("div",{class:[e.$style.windowFrameElement,e.$style.second,e.$style.utilityBar]},[n("UtilityBar",{staticClass:"apply-subtle-layer",attrs:{metadata:e.metadata,subtle:!1}})],1)])])])],1)])}),[],!1,(function(e){this.$style=c.default.locals||c.default}),"7accb7c4",null);t.default=component.exports;installComponents(component,{PaperFeed:n(420).default,Breadcrumbs:n(390).default,DividerLine:n(211).default,Card:n(154).default,Square:n(358).default,UtilityBar:n(414).default,SubtleLayer:n(156).default})},function(e,t,n){"use strict";n(393)},function(e,t,n){var r=n(3)(!1);r.push([e.i,".paper-feed{width:100%;display:flex;flex-direction:column}",""]),r.locals={sm:"640",md:"768",lg:"1024",xl:"1280",xxl:"1736",vLg:"900",zIndexForeground:"600",zIndexBase:"0",zIndexBackground:"-300",zIndexBackdrop:"300",zIndexPage:"1300",zindexSecondaryNavigation:"3300",zIndexPrimaryNavigation:"4300",zIndexCurtain:"5300",zIndexFullScreenFeatures:"6300",zIndexModals:"7300",zIndexNotifications:"8300",zIndexBlocker:"9300"},e.exports=r},function(e,t,n){"use strict";var r=n(364),o=n.n(r);n.d(t,"default",(function(){return o.a}))},function(e,t,n){var r=n(3)(!1);r.push([e.i,"[data-v-f88cf8b0]:export{sm:640;md:768;lg:1024;xl:1280;xxl:1736;vLg:900;zIndexForeground:600;zIndexBase:0;zIndexBackground:-300;zIndexBackdrop:300;zIndexPage:1300;zindexSecondaryNavigation:3300;zIndexPrimaryNavigation:4300;zIndexCurtain:5300;zIndexFullScreenFeatures:6300;zIndexModals:7300;zIndexNotifications:8300;zIndexBlocker:9300}.mainwrap--\\[Frida\\]_q-zn[data-v-f88cf8b0]{position:relative;font-size:9.69px;opacity:0;animation:fadeInAnimation-data-v-f88cf8b0--\\[Frida\\]_SoKV .2s ease-out .2s forwards}@keyframes fadeInAnimation-data-v-f88cf8b0--\\[Frida\\]_SoKV{0%{opacity:0}
1to{opacity:1}}",""]),r.locals={mainwrap:"mainwrap--[Frida]_q-zn","fadeInAnimation-data-v-f88cf8b0":"fadeInAnimation-data-v-f88cf8b0--[Frida]_SoKV"},e.exports=r},function(e,t,n){"use strict";n.r(t);var r={name:"PaperFeed"},o=(n(416),n(2)),component=Object(o.a)(r,(function(){var e=this,t=e.$createElement;return(e._self._c||t)("div",{staticClass:"paper-feed numbered-headings"},[e._t("default")],2)}),[],!1,null,null,null);t.default=component.exports},function(e,t,n){"use strict";n.r(t);n(64);var r=n(155),o={name:"DepthWindowEffectLayer",components:{AugmentedKinesisElement:n(363).default,MatchMedia:r.a},props:{active:{type:Boolean,default:!1},applyScaleEffect:{type:Boolean,default:!0},scaleEffectFactor:{type:Number,default:1.15},translationStrength:{type:Number,default:12},defaultScaleFactor:{type:Number,default:1}}},l=n(426),c=n(2);var component=Object(c.a)(o,(function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("MatchMedia",{scopedSlots:e._u([{key:"default",fn:function(t){var r=t.noHover;return[n("div",{staticClass:"layer",class:[e.active?e.$style.active:""]},[n("AugmentedKinesisElement",{attrs:{type:"translate",strength:e.$responsive.motion.reduced||r||!1===e.$breakpoints.md?0:e.translationStrength}},[n("div",{staticClass:"layer",class:[e.$style.contentWrapper,e.applyScaleEffect&&!1===e.$responsive.motion.reduced?e.$style.scaleEffect:""],style:{"--scaleContentOnHoverFactor":e.scaleEffectFactor,"--defaultScaleFactor":e.defaultScaleFactor}},[e._t("default")],2)])],1)]}}],null,!0)})}),[],!1,(function(e){this.$style=l.default.locals||l.default}),"6ae76e0b",null);t.default=component.exports;installComponents(component,{AugmentedKinesisElement:n(363).default})},function(e,t,n){"use strict";var r=n(365),o=n.n(r);n.d(t,"default",(function(){return o.a}))},function(e,t,n){var r=n(3)(!1);r.push([e.i,'[data-v-7accb7c4]:export{sm:640;md:768;lg:1024;xl:1280;xxl:1736;vLg:900;zIndexForeground:600;zIndexBase:0;zIndexBackground:-300;zIndexBackdrop:300;zIndexPage:1300;zindexSecondaryNavigation:3300;zIndexPrimaryNavigation:4300;zIndexCurtain:5300;zIndexFullScreenFeatures:6300;zIndexModals:7300;zIndexNotifications:8300;zIndexBlocker:9300}.container--\\[Frida\\]_zBft[data-v-7accb7c4]{height:auto;width:100%;margin:0 auto;display:grid;grid-template-columns:100%;grid-template-rows:auto;grid-template-areas:"feed";grid-row-gap:64px;padding-bottom:0}.container--\\[Frida\\]_zBft.windowView--\\[Frida\\]_KMbR[data-v-7accb7c4]{max-width:1920px;padding-bottom:calc(((100vh - calc(calc(min(calc(1920px * calc(calc(1 - calc(3 * .075)) / 2)), calc(100vw * calc(calc(1 - calc(3 * .075)) / 2))) / 10) * 8)) / 2) - var(--page-bottom-margin));grid-template-columns:calc(min(calc(1920px * .075), calc(100vw * .075)) - var(--page-spacing)) calc(calc(min(calc(1920px * calc(calc(1 - calc(3 * .075)) / 2)), calc(100vw * calc(calc(1 - calc(3 * .075)) / 2))) / 10) * 12) min(calc(1920px * .075),calc(100vw * .075)) calc(calc(min(calc(1920px * calc(calc(1 - calc(3 * .075)) / 2)), calc(100vw * calc(calc(1 - calc(3 * .075)) / 2))) / 10) * 8) calc(min(calc(1920px * .075), calc(100vw * .075)) - var(--page-spacing));grid-template-rows:auto;grid-template-areas:". feed . window .";grid-row-gap:0}.feed--\\[Frida\\]_X28O[data-v-7accb7c4]{grid-area:feed;width:100%;z-index:250}.window--\\[Frida\\]_2laV[data-v-7accb7c4]{grid-area:window;position:sticky;top:0;height:100vh;min-width:100px;margin-top:calc((100vh - calc(calc(min(calc(1920px * calc(calc(1 - calc(3 * .075)) / 2)), calc(100vw * calc(calc(1 - calc(3 * .075)) / 2))) / 10) * 8)) / -2);margin-bottom:calc((100vh - calc(calc(min(calc(1920px * calc(calc(1 - calc(3 * .075)) / 2)), calc(100vw * calc(calc(1 - calc(3 * .075)) / 2))) / 10) * 8)) / -2)}.window--\\[Frida\\]_2laV[data-v-7accb7c4],.windowContainer--\\[Frida\\]_puHl[data-v-7accb7c4]{display:flex;align-content:center;justify-content:center;flex-direction:column}.windowFrame--\\[Frida\\]_hfVa[data-v-7accb7c4]{width:100%;height:100px;display:flex;flex-direction:column}.windowFrame--\\[Frida\\]_hfVa.upper--\\[Frida\\]_I7tm[data-v-7accb7c4]{align-self:end;margin-bottom:8px;align-content:flex-end;justify-content:flex-end}.windowFrame--\\[Frida\\]_hfVa.lower--\\[Frida\\]_1s0u[data-v-7accb7c4]{align-self:end;margin-top:8px;align-content:flex-start;justify-content:flex-start}.title--\\[Frida\\]_Qu5e[data-v-7accb7c4]{font-size:1.2em;line-height:1.32em}.windowFrameElement--\\[Frida\\]_XOcb[data-v-7accb7c4]{transition:all .4s ease-out;opacity:0}
1.upper--\\[Frida\\]_I7tm .windowFrameElement--\\[Frida\\]_XOcb[data-v-7accb7c4]{transform:translateY(-37px);margin-bottom:8px}.upper--\\[Frida\\]_I7tm .windowFrameElement--\\[Frida\\]_XOcb.breadcrumbs--\\[Frida\\]_eJ1f[data-v-7accb7c4]{margin-bottom:8px}.lower--\\[Frida\\]_1s0u .windowFrameElement--\\[Frida\\]_XOcb[data-v-7accb7c4]{transform:translateY(37px);margin-top:8px}.lower--\\[Frida\\]_1s0u .windowFrameElement--\\[Frida\\]_XOcb.utilityBar--\\[Frida\\]_ZbGe[data-v-7accb7c4]{margin-top:-3px}.active--\\[Frida\\]_YVPW .windowFrameElement--\\[Frida\\]_XOcb.first--\\[Frida\\]_rUsZ[data-v-7accb7c4],.windowFrameElement--\\[Frida\\]_XOcb.first--\\[Frida\\]_rUsZ[data-v-7accb7c4],.windowFrameElement--\\[Frida\\]_XOcb.second--\\[Frida\\]_AxZS[data-v-7accb7c4]{transition-delay:0s}.active--\\[Frida\\]_YVPW .windowFrameElement--\\[Frida\\]_XOcb.second--\\[Frida\\]_AxZS[data-v-7accb7c4]{transition-delay:.1s}.windowFrameElement--\\[Frida\\]_XOcb.third--\\[Frida\\]_gVx4[data-v-7accb7c4]{transition-delay:0s}.active--\\[Frida\\]_YVPW .window
1FrameElement--\\[Frida\\]_XOcb.third--\\[Frida\\]_gVx4[data-v-7accb7c4]{transition-delay:.2s}.active--\\[Frida\\]_YVPW .windowFrameElement--\\[Frida\\]_XOcb[data-v-7accb7c4]{transform:translateY(0);opacity:1}',""]),r.locals={container:"container--[Frida]_zBft",windowView:"windowView--[Frida]_KMbR",feed:"feed--[Frida]_X28O",window:"window--[Frida]_2laV",windowContainer:"windowContainer--[Frida]_puHl",windowFrame:"windowFrame--[Frida]_hfVa",upper:"upper--[Frida]_I7tm",lower:"lower--[Frida]_1s0u",title:"title--[Frida]_Qu5e",windowFrameElement:"windowFrameElement--[Frida]_XOcb",breadcrumbs:"breadcrumbs--[Frida]_eJ1f",utilityBar:"utilityBar--[Frida]_ZbGe",active:"active--[Frida]_YVPW",first:"first--[Frida]_rUsZ",second:"second--[Frida]_AxZS",third:"third--[Frida]_gVx4"},e.exports=r},function(e,t,n){"use strict";n(395)},function(e,t,n){var r=n(3)(!1);r.push([e.i,".window-fade{opacity:.5}.window-fade-enter-active,.window-fade-leave-active{grid-area:1/1/1/1;transition:all 1s ease;overflow:hidden}.window-fade-enter{opacity:0;overflow:hidden}.window-fade-enter-to,.window-fade-leave{opacity:1;overflow:hidden}.window-fade-leave-to{opacity:0;overflow:hidden}",""]),r.locals={sm:"640",md:"768",lg:"1024",xl:"1280",xxl:"1736",vLg:"900",zIndexForeground:"600",zIndexBase:"0",zIndexBackground:"-300",zIndexBackdrop:"300",zIndexPage:"1300",zindexSecondaryNavigation:"3300",zIndexPrimaryNavigation:"4300",zIndexCurtain:"5300",zIndexFullScreenFeatures:"6300",zIndexModals:"7300",zIndexNotifications:"8300",zIndexBlocker:"9300"},e.exports=r},function(e,t,n){"use strict";var r=n(366),o=n.n(r);n.d(t,"default",(function(){return o.a}))},function(e,t,n){var r=n(3)(!1);r.push([e.i,"[data-v-6ae76e0b]:export{sm:640;md:768;lg:1024;xl:1280;xxl:1736;vLg:900;zIndexForeground:600;zIndexBase:0;zIndexBackground:-300;zIndexBackdrop:300;zIndexPage:1300;zindexSecondaryNavigation:3300;zIndexPrimaryNavigation:4300;zIndexCurtain:5300;zIndexFullScreenFeatures:6300;zIndexModals:7300;zIndexNotifications:8300;zIndexBlocker:9300}.contentWrapper--\\[Frida\\]_1vbS[data-v-6ae76e0b]{transition:transform .3s;transform:scale(var(--defaultScaleFactor))}.active--\\[Frida\\]_5Bjy .contentWrapper--\\[Frida\\]_1vbS.scaleEffect--\\[Frida\\]_q3Nr[data-v-6ae76e0b]{transform:scale(var(--scaleContentOnHoverFactor))}",""]),r.locals={contentWrapper:"contentWrapper--[Frida]_1vbS",active:"active--[Frida]_5Bjy",scaleEffect:"scaleEffect--[Frida]_q3Nr"},e.exports=r},function(e,t,n){"use strict";n.r(t);
1var r={name:"HoverOverlayLayer",components:{MatchMedia:n(155).a},inject:["mediaQueries"],props:{useCornerSensor:{type:Boolean,default:!1},curtainColor:{type:String,default:"#000"},closeOnOverlayClick:{type:Boolean,default:!0},active:{type:Boolean,default:!0},onlyActiveWhenHover:{type:Boolean,default:!1},onClick:{type:Function,default:function(){}}},data:function(){return{isHovered:!1,noHoverToggle:!1}},computed:{show:function(){return!(!this.active||!1!==(this.mediaQueries.noHover&&this.onlyActiveWhenHover))&&(this.mediaQueries.noHover?this.noHoverToggle:this.isHovered)}},methods:{handleClick:function(){this.onClick&&this.onClick(),this.setNoHoverToggle()},setNoHoverToggle:function(){this.noHoverToggle=!0},clearNoHoverToggle:function(e){this.noHoverToggle=!1,e.stopPropagation()}}},o=n(442),l=(n(444),n(2));var component=Object(l.a)(r,(function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("MatchMedia",{scopedSlots:e._u([{key:"default",fn:function(t){var r=t.noHover;return[n("div",e._g({staticClass:"layer",class:[e.show?e.$style.show:""],on:{mouseover:function(){!1===e.useCornerSensor&&(e.isHovered=!0)},click:e.handleClick}},e.$listeners),[n("div",{staticClass:"layer dark",class:e.$style.layerContent},[e._t("content")],2),e._v(" "),n("div",{staticClass:"layer",class:[e.show?e.$style.show:"",e.$style.overlay],on:{mouseleave:function(){!1===e.useCornerSensor&&(e.isHovered=!1,e.noHoverToggle=!1)},click:function(t){e.closeOnOverlayClick&&e.clearNoHoverToggle(t)}}},[r?n("div",{staticClass:"layer"},[n("div",{class:e.$style.closeButtonWrapper},[n("Button",{staticClass:"hoverOverlayLayerCloseButton",attrs:{icon:"",rounded:""},on:{click:e.clearNoHoverToggle}},[e._v("\n â\n ")])],1)]):e._e(),e._v(" "),n("div",{staticClass:"layer",class:e.$style.overlayContent,on:{click:e.onClick}},[e._t("hover-overlay")],2),e._v(" "),n("CurtainLayer",{attrs:{show:e.show,"shadow-color":e.curtainColor,"blur-effect":!1}})],1),e._v(" "),e.useCornerSensor?n("div",{class:e.$style.infoSensor,on:{mouseover:function(t){e.isHovered=!0},mouseleave:function(t){e.isHovered=!1}}},[n("div",{class:[e.isHovered?"highlighted":"",e.$style.infoButton]})]):e._e()])]}}],null,!0)})}),[],!1,(function(e){this.$style=o.default.locals||o.default}),"4da723fa",null);t.default=component.exports;installComponents(component,{Button:n(402).default,CurtainLayer:n(157).default})},,function(e,t,n){"use strict";var r=n(367),o=n.n(r);n.d(t,"default",(function(){return o.a}))},function(e,t,n){var r=n(3)(!1);r.push([e.i,"[data-v-4ee81994]:export{sm:640;md:768;lg:1024;xl:1280;xxl:1736;vLg:900;zIndexForeground:600;zIndexBase:0;zIndexBackground:-300;zIndexBackdrop:300;zIndexPage:1300;zindexSecondaryNavigation:3300;zIndexPrimaryNavigation:4300;zIndexCurtain:5300;zIndexFullScreenFeatures:6300;zIndexModals:7300;zIndexNotifications:8300;zIndexBlocker:9300}.paperPage--\\[Frida\\]_wDP6[data-v-4ee81994]{margin:var(--grid-spacing) 0 var(--grid-spacing) 0}*>.paperPage--\\[Frida\\]_wDP6[data-v-4ee81994]:first-child{margin-top:0!important;margin-left:0!important}*>.paperPage--\\[Frida\\]_wDP6[data-v-4ee81994]:last-child{margin-bottom:0!important;margin-right:0!important}.content--\\[Frida\\]_9v6T[data-v-4ee81994]{display:block;z-index:9999;height:auto}.applyPaperStyling--\\[Frida\\]_jKT0.articleSpacing--\\[Frida\\]_AIQO .content--\\[Frida\\]_9v6T[data-v-4ee81994]{padding:var(--article-spacing) var(--article-spacing) var(--article-spacing) var(--article-spacing)}.applyPaperStyling--\\[Frida\\]_jKT0.simpleSpacing--\\[Frida\\]_yACm .content--\\[Frida\\]_9v6T[data-v-4ee81994]{padding:var(--paper-spacing) var(--paper-spacing) var(--paper-spacing) var(--paper-spacing)}",""]),r.locals={paperPage:"paperPage--[Frida]_wDP6",content:"content--[Frida]_9v6T",applyPaperStyling:"applyPaperStyling--[Frida]_jKT0",articleSpacing:"articleSpacing--[Frida]_AIQO",simpleSpacing:"simpleSpacing--[Frida]_yACm"},e.exports=r},function(e,t,n){"use strict";n.r(t);var r=n(450),o={name:"MediaInteractionGateLayer",components:{LoadSymbol:n.n(r).a},props:{mediaMetadata:{type:Object,required:!0},loadAlways:{type:Boolean,default:!1},imageSize:{type:String,default:"contain"}},computed:{source:function(){return this.mediaMetadata.poster||n(451)},altText:function(){return"Poster for media ".concat(this.mediaMetadata.title,".")},type:function(){return this.mediaMetadata.type||""}}}
1,l=n(452),c=n(2);var component=Object(c.a)(o,(function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("InteractionGateLayer",{attrs:{"only-for-mobile":"","load-always":e.loadAlways||"image"===e.type},scopedSlots:e._u([{key:"original",fn:function(){return[e._t("default")]},proxy:!0},{key:"gate",fn:function(){return[n("Square",[n("div",{staticClass:"layer",class:e.$style.wrapper},[n("ImageLayer",{class:[e.$style.background],attrs:{src:e.source,alt:e.altText,"image-size":e.imageSize}}),e._v(" "),n("div",{staticClass:"layer dark",class:e.$style.caption},[n("div",{class:e.$style.loadSymbolWrapper},[n("LoadSymbol",{class:e.$style.svgWrapper})],1)])],1)])]},proxy:!0}],null,!0)})}),[],!1,(function(e){this.$style=l.default.locals||l.default}),"7b866743",null);t.default=component.exports;installComponents(component,{ImageLayer:n(369).default,Square:n(358).default,InteractionGateLayer:n(449).default})},function(e,t,n){"use strict";n.r(t);var r={name:"MediaAsset",props:{mediaMetadata:{type:Object,required:!0},contentSize:{type:String,default:"contain"},isThumbnail:{type:Boolean,default:!1},roundBorder:{type:Boolean,default:!1},containerAspectRatio:{type:String,default:""}},data:function(){return{showInformation:!1}},computed:{source:function(){return this.isThumbnail&&void 0!==this.mediaMetadata.thumbnail?this.mediaMetadata.thumbnail.source:this.mediaMetadata.source},alt:function(){return this.mediaMetadata.alt||""},fallbackSource:function(){return this.mediaMetadata.fallbackSource},type:function(){return this.mediaMetadata.type},poster:function(){return this.mediaMetadata.poster}}},o=n(2),component=Object(o.a)(r,(function(){var e=this,t=e.$createElement,n=e._self._c||t;return"image"===e.type?n("ImageLayer",{staticClass:"test",attrs:{src:e.source,alt:e.alt,"image-size":e.contentSize,"round-border":e.roundBorder}}):"video"===e.type?n("VideoLayer",{staticClass:"test",attrs:{source:e.source,"fallback-source":e.fallbackSource,poster:e.poster,"content-size":e.contentSize,"round-border":e.roundBorder,"container-aspect-ratio":e.containerAspectRatio}}):e._e()}),[],!1,null,"a3f7d97c",null);t.default=component.exports;installComponents(component,{ImageLayer:n(369).default,VideoLayer:n(448).default})},function(e,t,n){"use strict";n.r(t);var r=n(456),o={name:"MediaInformation",components:{ArrowNorthEast:n.n(r).a},props:{mediaMetadata:{type:Object,required:!0},hideFacts:{type:Boolean,default:!1},showInspectIcon:{type:Boolean,default:!1},showDividerLine:{type:Boolean,default:!1}},computed:{source:function(){return this.mediaMetadata.source},alt:function(){return this.mediaMetadata.alt||""},fallbackSource:function(){return this.mediaMetadata.fallbackSource},type:function(){return this.mediaMetadata.type},poster:function(){return this.mediaMetadata.poster},title:function(){return this.mediaMetadata.title||""},creditLabel:function(){var e;return(null===(e=this.mediaMetadata.credit)||void 0===e?void 0:e.label)||""},creditTo:function(){var e;return(null===(e=this.mediaMetadata.credit)||void 0===e?void 0:e.to)||""},year:function(){return this.mediaMetadata.year||""},licenseLabel:function(){var e;return(null===(e=this.mediaMetadata.license)||void 0===e?void 0:e.label)||""},licenseTo:function(){var e;return(null===(e=this.mediaMetadata.license)||void 0===e?void 0:e.to)||""},caption:function(){return this.mediaMetadata.caption||""}}},l=n(457),c=n(2);var component=Object(c.a)(o,(function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"text dark no-interaction",class:e.$style.info},[n("div",{class:e.$style.firstRow},[n("span",{class:e.$style.title},[e._v("\n "+e._s(e.title)+"\n ")]),e._v(" "),e.showInspectIcon?n("span",{class:e.$style.inspect},[n("ArrowNorthEast")],1):e._e()]),e._v(" "),!1===e.hideFacts?n("div",{class:e.$style.factContainer},[e.creditLabel?n("span",{class:e.$style.fact},[e._v(" by "),""!==e.creditTo?n("Hyperlink",{attrs:{to:e.creditTo}},[e._v(e._s(e.creditLabel))]):n("span",[e._v(e._s(e.creditLabel))])],1):e._e(),e._v(" "),e.year?n("span",{class:e.$style.fact}
1,[e._v(" "+e._s(e.year)+" ")]):e._e(),e._v(" "),e.licenseLabel?n("span",{class:e.$style.fact},[""!==e.licenseTo?n("Hyperlink",{attrs:{to:e.licenseTo}},[e._v(e._s(e.licenseLabel))]):n("span",[e._v(e._s(e.licenseLabel))])],1):e._e()]):e._e(),e._v(" "),e.showDividerLine?n("div",{class:e.$style.dividerLineWrapper},[n("DividerLine",{attrs:{direction:"horizontal",dark:"","full-length":""}})],1):e._e(),e._v(" "),n("div",{class:e.$style.caption},[e._v("\n "+e._s(e.caption)+"\n ")])])}),[],!1,(function(e){this.$style=l.default.locals||l.default}),"3b954f07",null);t.default=component.exports;installComponents(component,{Hyperlink:n(63).default,DividerLine:n(211).default})},function(e,t,n){"use strict";n.r(t);n(64);var r=n(385),o=n(398),l={name:"DirectoriesPreviewCard",components:{InteractiveCard:r.default,DirectoriesListLayer:o.default},props:{items:{type:Array},fixDoubleLine:{},fittySizeFactor:{},fittyMaxFontSize:{type:Number,default:15},cardSizeFactor:{},minNumberOfRows:{}}},c=n(2),component=Object(c.a)(l,(function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("InteractiveCard",{attrs:{"size-factor":e.cardSizeFactor}},[n("div",{staticClass:"layer"},[n("DirectoriesListLayer",{attrs:{"fitty-size-factor":e.fittySizeFactor,"fitty-max-font-size":e.fittyMaxFontSize,items:e.items,"fix-double-line":e.fixDoubleLine,"min-number-of-rows":e.minNumberOfRows}})],1)])}),[],!1,null,"7b57b61c",null);t.default=component.exports;installComponents(component,{DirectoriesListLayer:n(398).default,InteractiveCard:n(385).default})},function(e,t,n){e.exports=n.p+"videos/home-reel_iteration-8.b13bf65.webm"},function(e,t,n){e.exports=n.p+"videos/home-reel_iteration-8_fallback.256bf07.mp4"},function(e,t,n){"use strict";var r=n(371),o=n.n(r);n.d(t,"default",(function(){return o.a}))},function(e,t,n){var r=n(3)(!1);r.push([e.i,"[data-v-9f2bddfa]:export{sm:640;md:768;lg:1024;xl:1280;xxl:1736;vLg:900;zIndexForeground:600;zIndexBase:0;zIndexBackground:-300;zIndexBackdrop:300;zIndexPage:1300;zindexSecondaryNavigation:3300;zIndexPrimaryNavigation:4300;zIndexCurtain:5300;zIndexFullScreenFeatures:6300;zIndexModals:7300;zIndexNotifications:8300;zIndexBlocker:9300}.sensor--\\[Frida\\]_pCIK[data-v-9f2bddfa]{height:auto;width:100%;margin-top:4em;margin-bottom:4em;cursor:pointer}.sensor--\\[Frida\\]_pCIK.hideInFeed--\\[Frida\\]_dpeA[data-v-9f2bddfa]{margin-top:0;margin-bottom:0}.activeIndicator--\\[Frida\\]_kP4J[data-v-9f2bddfa]{font-weight:300}.inFeedCaption--\\[Frida\\]_cQE8[data-v-9f2bddfa]{margin-top:.5em;font-size:inherit}.inFeedCaption--\\[Frida\\]_cQE8.ported--\\[Frida\\]_HYBX[data-v-9f2bddfa]{margin-top:unset;margin-bottom:0}",""]),r.locals={sensor:"sensor--[Frida]_pCIK",hideInFeed:"hideInFeed--[Frida]_dpeA",activeIndicator:"activeIndicator--[Frida]_kP4J",inFeedCaption:"inFeedCaption--[Frida]_cQE8",ported:"ported--[Frida]_HYBX"},e.exports=r},function(e,t,n){"use strict";var r=n(372),o=n.n(r);n.d(t,"default",(function(){return o.a}))},function(e,t,n){var r=n(3)(!1);r.push([e.i,"[data-v-043ba128]:export{sm:640;md:768;lg:1024;xl:1280;xxl:1736;vLg:900;zIndexForeground:600;zIndexBase:0;zIndexBackground:-300;zIndexBackdrop:300;zIndexPage:1300;zindexSecondaryNavigation:3300;zIndexPrimaryNavigation:4300;zIndexCurtain:5300;zIndexFullScreenFeatures:6300;zIndexModals:7300;zIndexNotifications:8300;zIndexBlocker:9300}.wrapper--\\[Frida\\]_dYk7[data-v-043ba128]{width:100%;height:100%;display:flex;justify-content:center;align-items:center}.video--\\[Frida\\]_MoLI[data-v-043ba128]{width:100%!important;height:auto!important;background-size:contain;border-radius:3px}.landscapeViewport--\\[Frida\\]_XZtZ.contain--\\[Frida\\]_zHbD .video--\\[Frida\\]_MoLI[data-v-043ba128]{width:auto!important;height:100%!important}.landscapeViewport--\\[Frida\\]_XZtZ.cover--\\[Frida\\]_iFt- .video--\\[Frida\\]_MoLI[data-v-043ba128]{width:100%!important;height:auto!important}.landscapeViewport--\\[Frida\\]_XZtZ.original--\\[Frida\\]_AIoD .video--\\[Frida\\]_MoLI[data-v-043ba128]{width:auto!important;height:auto!important;max-width:100%;max-height:100%}.portraitViewport--\\[Frida\\]_-qzh.cover--\\[Frida\\]_iFt- .video--\\[Frida\\]_MoLI[data-v-043ba128]{width:auto!important;height:100%!important}.portraitViewport--\\[Frida\\]_-qzh.contain--\\[Frida\\]_zHbD .video--\\[Frida\\]_MoLI[data-v-043ba128]{width:100%!important;height:auto!important}.portraitViewport--\\[Frida\\]_-qzh.original--\\[Frida\\]_AIoD .video--\\[Frida\\]_MoLI[data-v-043ba128]{width:auto!important;height:auto!important;max-width:100%;max-height:100%}.video--\\[Frida\\]_MoLI.roundBorder--\\[Frida\\]_9aPn[data-v-043ba128]{border-radius:var(--media-border-radius)}",""]),r.locals={wrapper:"wrapper--[Frida]_dYk7",video:"video--[Frida]_MoLI",landscapeViewport:"landscapeViewport--[Frida]_XZtZ",contain:"contain--[Frida]_zHbD",cover:"cover--[Frida]_iFt-",original:"original--[Frida]_AIoD",portraitViewport:"portraitViewport--[Frida]_-qzh",roundBorder:"roundBorder--[Frida]_9aPn"},e.exports=r},function(e,t,n){"use strict";var r=n(373),o=n.n(r);n.d(t,"default",(function(){return o.a}))},function(e,t,n){var r=n(3)(!1);
1r.push([e.i,"[data-v-4da723fa]:export{sm:640;md:768;lg:1024;xl:1280;xxl:1736;vLg:900;zIndexForeground:600;zIndexBase:0;zIndexBackground:-300;zIndexBackdrop:300;zIndexPage:1300;zindexSecondaryNavigation:3300;zIndexPrimaryNavigation:4300;zIndexCurtain:5300;zIndexFullScreenFeatures:6300;zIndexModals:7300;zIndexNotifications:8300;zIndexBlocker:9300}.infoSensor--\\[Frida\\]_\\+oPs[data-v-4da723fa]{position:absolute;right:0;bottom:0;width:40px;height:40px;z-index:1900;display:flex;flex-direction:column;justify-content:center}.infoButton--\\[Frida\\]_Vg3R[data-v-4da723fa]{margin:auto;width:14px;height:14px;background-color:#333;border-radius:99px;transition:all .3s}.infoButton--\\[Frida\\]_Vg3R.highlighted--\\[Frida\\]_i5CQ[data-v-4da723fa]{background-color:#000}.closeButtonWrapper--\\[Frida\\]_i5Tz[data-v-4da723fa]{position:absolute;height:30px;padding-left:0;padding-right:0;justify-self:flex-end;font-weight:300;right:calc(var(--card-spacing)/2);top:calc(var(--card-spacing)/2);z-index:2900}.contentContainer--\\[Frida\\]_rLSO[data-v-4da723fa]{z-index:1300}.overlay--\\[Frida\\]_6aLM[data-v-4da723fa]{z-index:2300;transition:all .3s;opacity:0;pointer-events:none}.overlay--\\[Frida\\]_6aLM.show--\\[Frida\\]_6WnE[data-v-4da723fa]{opacity:1;pointer-events:all}.overlayContent--\\[Frida\\]_RzwP[data-v-4da723fa]{z-index:2900}.fade-enter-active--\\[Frida\\]_KH4M[data-v-4da723fa],.fade-leave-active--\\[Frida\\]_r364[data-v-4da723fa]{transition:all .3s}.fade-enter--\\[Frida\\]_p6An[data-v-4da723fa],.fade-leave-active--\\[Frida\\]_r364[data-v-4da723fa]{opacity:0}
1",""]),r.locals={infoSensor:"infoSensor--[Frida]_+oPs",infoButton:"infoButton--[Frida]_Vg3R",highlighted:"highlighted--[Frida]_i5CQ",closeButtonWrapper:"closeButtonWrapper--[Frida]_i5Tz",contentContainer:"contentContainer--[Frida]_rLSO",overlay:"overlay--[Frida]_6aLM",show:"show--[Frida]_6WnE",overlayContent:"overlayContent--[Frida]_RzwP","fade-enter-active":"fade-enter-active--[Frida]_KH4M","fade-leave-active":"fade-leave-active--[Frida]_r364","fade-enter":"fade-enter--[Frida]_p6An"},e.exports=r},function(e,t,n){"use strict";n(397)},function(e,t,n){var r=n(3)(!1);r.push([e.i,".hoverOverlayLayerCloseButton span{color:#fff;font-weight:200}",""]),r.locals={sm:"640",md:"768",lg:"1024",xl:"1280",xxl:"1736",vLg:"900",zIndexForeground:"600",zIndexBase:"0",zIndexBackground:"-300",zIndexBackdrop:"300",zIndexPage:"1300",zindexSecondaryNavigation:"3300",zIndexPrimaryNavigation:"4300",zIndexCurtain:"5300",zIndexFullScreenFeatures:"6300",zIndexModals:"7300",zIndexNotifications:"8300",zIndexBlocker:"9300"},e.exports=r},function(e,t,n){"use strict";var r=n(374),o=n.n(r);n.d(t,"default",(function(){return o.a}))},function(e,t,n){var r=n(3)(!1);r.push([e.i,"[data-v-d41c9226]:export{sm:640;md:768;lg:1024;xl:1280;xxl:1736;vLg:900;zIndexForeground:600;zIndexBase:0;zIndexBackground:-300;zIndexBackdrop:300;zIndexPage:1300;zindexSecondaryNavigation:3300;zIndexPrimaryNavigation:4300;zIndexCurtain:5300;zIndexFullScreenFeatures:6300;zIndexModals:7300;zIndexNotifications:8300;zIndexBlocker:9300}.paperPatch--\\[Frida\\]_Xn7X[data-v-d41c9226]{margin:4em 0 0}.paperPatch--\\[Frida\\]_Xn7X.applyPaperStyling--\\[Frida\\]_EO7U[data-v-d41c9226]{margin:var(--grid-spacing) 0 var(--grid-spacing) 0}*>.paperPatch--\\[Frida\\]_Xn7X[data-v-d41c9226]:first-child{margin-top:0!important;margin-left:0!important}*>.paperPatch--\\[Frida\\]_Xn7X[data-v-d41c9226]:last-child{margin-bottom:0!important;margin-right:0!important}.content--\\[Frida\\]_3x9g[data-v-d41c9226]{display:block;z-index:9999;height:auto}.applyPaperStyling--\\[Frida\\]_EO7U.articleSpacing--\\[Frida\\]_-XLY .content--\\[Frida\\]_3x9g[data-v-d41c9226]{padding:var(--article-spacing) var(--article-spacing) var(--article-spacing) var(--article-spacing)}.applyPaperStyling--\\[Frida\\]_EO7U.simpleSpacing--\\[Frida\\]_D\\+Iz .content--\\[Frida\\]_3x9g[data-v-d41c9226]{padding:var(--paper-spacing) var(--paper-spacing) var(--paper-spacing) var(--paper-spacing)}",""]),r.locals={paperPatch:"paperPatch--[Frida]_Xn7X",applyPaperStyling:"applyPaperStyling--[Frida]_EO7U",content:"content--[Frida]_3x9g",articleSpacing:"articleSpacing--[Frida]_-XLY",simpleSpacing:"simpleSpacing--[Frida]_D+Iz"},e.exports=r},function(e,t,n){"use strict";n.r(t);
1var r={name:"VideoLayer",props:{source:{required:!0},fallbackSource:{required:!0},poster:{type:String,required:!0},contentSize:{type:String,default:"cover"},roundBorder:{type:Boolean,default:!1},containerAspectRatio:{type:String,default:""}},computed:{isLandscape:function(){return""!==this.containerAspectRatio?"landscape"===this.containerAspectRatio:this.$viewportOrientation.landscape},isPortrait:function(){return""!==this.containerAspectRatio?"portrait"===this.containerAspectRatio:this.$viewportOrientation.portrait}}},o=n(440),l=n(2);var component=Object(l.a)(r,(function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"layer"},[n("div",{class:[e.$style.wrapper,e.isLandscape?e.$style.landscapeViewport:e.isPortrait?e.$style.portraitViewport:e.$style.landscapeViewport,"contain"===e.contentSize?e.$style.contain:"cover"===e.contentSize?e.$style.cover:"auto"===e.contentSize||"original"===e.contentSize?e.$style.original:""]},[n("video",{class:[e.$style.video,e.roundBorder?e.$style.roundBorder:""],attrs:{playsinline:"",autoplay:"",muted:"",loop:""},domProps:{muted:!0},on:{click:function(e){e.stopPropagation()}}},[n("source",{attrs:{src:e.source,type:"video/webm; codecs=vp8"}}),e._v(" "),n("source",{attrs:{src:e.fallbackSource,type:"video/mp4;"}})])])])}),[],!1,(function(e){this.$style=o.default.locals||o.default}),"043ba128",null);t.default=component.exports},function(e,t,n){"use strict";n.r(t);
1var r={name:"InteractionGateLayer",props:{onlyForMobile:{type:Boolean,default:!1},loadAlways:{type:Boolean,default:!1}},data:function(){return{show:!1}},computed:{loadOriginal:function(){return!(!!this.$responsive.motion.reduced||!this.loadAlways&&(!this.onlyForMobile||!1===this.$breakpoints.md))||this.show}},methods:{onClick:function(){this.show=!0}}},o=n(2),component=Object(o.a)(r,(function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"layer"},[e.loadOriginal?e._t("original"):n("div",{staticClass:"layer",on:{click:e.onClick}},[e._t("gate")],2)],2)}),[],!1,null,null,null);t.default=component.exports},function(e,t,n){n(26),n(23),n(31),n(38),n(39);var r=n(212),o=n(213),l=["class","staticClass","style","staticStyle","attrs"];function c(object,e){var t=Object.keys(object);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(object);e&&(n=n.filter((function(e){return Object.getOwnPropertyDescriptor(object,e).enumerable}))),t.push.apply(t,n)}return t}e.exports={functional:!0,render:function(e,t){var n=t._c,data=(t._v,t.data),d=t.children,m=void 0===d?[]:d,h=data.class,f=data.staticClass,style=data.style,v=data.staticStyle,y=data.attrs,_=void 0===y?{}:y,w=o(data,l);return n("svg",function(e){for(var i=1;i<arguments.length;i++){var source=null!=arguments[i]?arguments[i]:{};i%2?c(Object(source),!0).forEach((function(t){r(e,t,source[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(source)):c(Object(source)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(source,t))}))}return e}({class:[h,f],style:[style,v],attrs:Object.assign({xmlns:"http://www.w3.org/2000/svg",width:"76",height:"76",viewBox:"0 0 24 24",fill:"#ffffff",stroke:"#ffffff","stroke-width":"3","stroke-linecap":"round","stroke-linejoin":"round"},_)},w),m.concat([n("polygon",{attrs:{points:"5 3 19 12 5 21 5 3"}})]))}}},function(e,t,n){e.exports=n.p+"img/Zeichenfläche1_4.0de2fe9.png"},function(e,t,n){"use strict";var r=n(375),o=n.n(r);n.d(t,"default",(function(){return o.a}))},function(e,t,n){var r=n(3)(!1);r.push([e.i,"[data-v-7b866743]:export{sm:640;md:768;lg:1024;xl:1280;xxl:1736;vLg:900;zIndexForeground:600;zIndexBase:0;zIndexBackground:-300;zIndexBackdrop:300;zIndexPage:1300;zindexSecondaryNavigation:3300;zIndexPrimaryNavigation:4300;zIndexCurtain:5300;zIndexFullScreenFeatures:6300;zIndexModals:7300;zIndexNotifications:8300;zIndexBlocker:9300}.wrapper--\\[Frida\\]_Je1G[data-v-7b866743]{will-change:transform;transform:scale(1.2);-webkit-transform:scale(1.2)}.caption--\\[Frida\\]_VBva[data-v-7b866743],.wrapper--\\[Frida\\]_Je1G[data-v-7b866743]{height:100%;min-height:100%;width:100%}.caption--\\[Frida\\]_VBva[data-v-7b866743]{display:flex;align-items:center;justify-content:center;text-align:center;filter:grayscale(0);color:var(--text-color);fill:var(--text-color);opacity:.5;cursor:pointer;font-weight:400}.background--\\[Frida\\]_na70[data-v-7b866743]{filter:blur(3px)}.loadSymbolWrapper--\\[Frida\\]_JqLi[data-v-7b866743]{width:50px;height:50px}.svgWrapper--\\[Frida\\]_hXN5[data-v-7b866743]{width:100%;height:100%}",""]),r.locals={wrapper:"wrapper--[Frida]_Je1G",caption:"caption--[Frida]_VBva",background:"background--[Frida]_na70",loadSymbolWrapper:"loadSymbolWrapper--[Frida]_JqLi",svgWrapper:"svgWrapper--[Frida]_hXN5"},e.exports=r},function(e,t,n){"use strict";var r=n(376),o=n.n(r);n.d(t,"default",(function(){return o.a}))},function(e,t,n){var r=n(3)(!1);r.push([e.i,"[data-v-5a8556ba]:export{sm:640;md:768;lg:1024;xl:1280;xxl:1736;vLg:900;zIndexForeground:600;zIndexBase:0;zIndexBackground:-300;zIndexBackdrop:300;zIndexPage:1300;zindexSecondaryNavigation:3300;zIndexPrimaryNavigation:4300;zIndexCurtain:5300;zIndexFullScreenFeatures:6300;zIndexModals:7300;zIndexNotifications:8300;zIndexBlocker:9300}.container--\\[Frida\\]_LnYs[data-v-5a8556ba],.wrapper--\\[Frida\\]_K4br[data-v-5a8556ba]{width:100%;height:100%}.container--\\[Frida\\]_LnYs[data-v-5a8556ba]{display:grid;grid-template-columns:auto;grid-template-rows:repeat(var(--numberOfProjects),calc(calc(100% / var(--numberOfProjects)) - calc(var(--card-spacing) * calc(var(--numberOfProjects)
1- 1) / var(--numberOfProjects))));grid-gap:var(--card-spacing)}",""]),r.locals={container:"container--[Frida]_LnYs",wrapper:"wrapper--[Frida]_K4br"},e.exports=r},function(e,t,n){n(26),n(23),n(31),n(38),n(39);var r=n(212),o=n(213),l=["class","staticClass","style","staticStyle","attrs"];function c(object,e){var t=Object.keys(object);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(object);e&&(n=n.filter((function(e){return Object.getOwnPropertyDescriptor(object,e).enumerable}))),t.push.apply(t,n)}return t}e.exports={functional:!0,render:function(e,t){var n=t._c,data=(t._v,t.data),d=t.children,m=void 0===d?[]:d,h=data.class,f=data.staticClass,style=data.style,v=data.staticStyle,y=data.attrs,_=void 0===y?{}:y,w=o(data,l);return n("svg",function(e){for(var i=1;i<arguments.length;i++){var source=null!=arguments[i]?arguments[i]:{};i%2?c(Object(source),!0).forEach((function(t){r(e,t,source[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(source)):c(Object(source)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(source,t))}))}return e}({class:[h,f],style:[style,v],attrs:Object.assign({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 376.59 376.59"},_)},w),m.concat([n("g",{attrs:{id:"Ebene_2","data-name":"Ebene 2"}},[n("g",{attrs:{id:"Ebene_1-2","data-name":"Ebene 1"}},[n("polyline",{staticStyle:{fill:"none",stroke:"#fff","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"50px"},attrs:{points:"25 25 351.59 25 351.59 351.59"}}),n("line",{staticStyle:{fill:"none",stroke:"#fff","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"50px"},attrs:{x1:"351.59",y1:"25",x2:"25",y2:"351.59"}})])])]))}}},function(e,t,n){"use strict";var r=n(377),o=n.n(r);n.d(t,"default",(function(){return o.a}))},function(e,t,n){var r=n(3)(!1);r.push([e.i,'[data-v-3b954f07]:export{sm:640;md:768;lg:1024;xl:1280;xxl:1736;vLg:900;zIndexForeground:600;zIndexBase:0;zIndexBackground:-300;zIndexBackdrop:300;zIndexPage:1300;zindexSecondaryNavigation:3300;zIndexPrimaryNavigation:4300;zIndexCurtain:5300;zIndexFullScreenFeatures:6300;zIndexModals:7300;zIndexNotifications:8300;zIndexBlocker:9300}.info--\\[Frida\\]_uc13[data-v-3b954f07]{transition:all .3s;flex-direction:column;padding:var(--card-spacing)}.firstRow--\\[Frida\\]_ovy5[data-v-3b954f07],.info--\\[Frida\\]_uc13[data-v-3b954f07]{display:flex;width:100%}.firstRow--\\[Frida\\]_ovy5[data-v-3b954f07]{margin-bottom:18px;flex-direction:row;flex-wrap:nowrap}.title--\\[Frida\\]_VVOC[data-v-3b954f07]{font-weight:500;font-size:1.2em;letter-spacing:2px;min-height:20px;flex-grow:1}.inspect--\\[Frida\\]_FwsO[data-v-3b954f07]{width:15px;text-align:right;vertical-align:text-top;transform:translateY(-4px);color:#fff}.factContainer--\\[Frida\\]_MUTF[data-v-3b954f07]{display:flex;flex-direction:row;flex-wrap:wrap;font-weight:500;font-style:normal;font-size:1em;height:24px;margin-bottom:20px;width:100%}.fact--\\[Frida\\]_A\\+yc[data-v-3b954f07]:not(:last-child):after{content:" ⢠";display:inline;margin-left:.5em;margin-right:.5em}.caption--\\[Frida\\]_Paqh[data-v-3b954f07]{font-family:halcom,sans-serif;font-weight:200;font-style:normal;font-size:1rem;line-height:1.6;text-align:justify;margin-bottom:.3em;width:100%}.dividerLineWrapper--\\[Frida\\]_JDJL[data-v-3b954f07]{margin-top:0;height:2px;margin-bottom:20px}',""]),r.locals={info:"info--[Frida]_uc13",firstRow:"firstRow--[Frida]_ovy5",title:"title--[Frida]_VVOC",inspect:"inspect--[Frida]_FwsO",factContainer:"factContainer--[Frida]_MUTF",fact:"fact--[Frida]_A+yc",caption:"caption--[Frida]_Paqh",dividerLineWrapper:"dividerLineWrapper--[Frida]_JDJL"},e.exports=r},function(e,t,n){"use strict";var r=n(378),o=n.n(r);n.d(t,"default",(function(){return o.a}))},function(e,t,n){var r=n(3)(!1);r.push([e.i,"[data-v-362edc6a]:export{sm:640;md:768;lg:1024;xl:1280;xxl:1736;vLg:900;zIndexForeground:600;zIndexBase:0;zIndexBackground:-300;zIndexBackdrop:300;zIndexPage:1300;zindexSecondaryNavigation:3300;zIndexPrimaryNavigation:4300;zIndexCurtain:5300;zIndexFullScreenFeatures:6300;zIndexModals:7300;zIndexNotifications:8300;zIndexBlocker:9300}.target--\\[Frida\\]_9xFE[data-v-362edc6a]{--transition-reference-time:0.4s;transition:opacity var(--transition-reference-time),transform var(--transition-reference-time),visibility var(--transition-reference-time);pointer-events:none;visibility:hidden}.target--\\[Frida\\]_9xFE.active--\\[Frida\\]_M7-A[data-v-362edc6a]{pointer-events:all;visibility:visible}.target--\\[Frida\\]_9xFE.active--\\[Frida\\]_M7-A.transitionDelay--\\[Frida\\]_ePiS[data-v-362edc6a]:not(.spamming--\\[Frida\\]_6fD2){transition-delay:var(--transition-reference-time)}.target--\\[Frida\\]_9xFE.active--\\[Frida\\]_M7-A.transitionDelay--\\[Frida\\]_ePiS.spamming--\\[Frida\\]_6fD2[data-v-362edc6a]{transition-delay:.33s}.target--\\[Frida\\]_9xFE.active--\\[Frida\\]_M7-A.transitionDelay--\\[Frida\\]_ePiS.special--\\[Frida\\]_yIws[data-v-362edc6a]{transition-delay:0s}.target--\\[Frida\\]_9xFE.active--\\[Frida\\]_M7-A.fade--\\[Frida\\]_Cj2B[data-v-362edc6a]{opacity:1}.target--\\[Frida\\]_9xFE.active--\\[Frida\\]_M7-A.fadeHorizontally--\\[Frida\\]_K25a[data-v-362edc6a]{opacity:1;transform:translate(0)}.target--\\[Frida\\]_9xFE.last--\\[Frida\\]_uP-v.fade--\\[Frida\\]_Cj2B[data-v-362edc6a],.target--\\[Frida\\]_9xFE.last--\\[Frida\\]_uP-v.fadeHorizontally--\\[Frida\\]_K25a[data-v-362edc6a]{opacity:0}
1.target--\\[Frida\\]_9xFE.last--\\[Frida\\]_uP-v.fadeHorizontally--\\[Frida\\]_K25a.next--\\[Frida\\]_hkgA[data-v-362edc6a]{transform:translate(-30px)}.target--\\[Frida\\]_9xFE.last--\\[Frida\\]_uP-v.fadeHorizontally--\\[Frida\\]_K25a.previous--\\[Frida\\]_40Rw[data-v-362edc6a]{transform:translate(30px)}.target--\\[Frida\\]_9xFE.inactive--\\[Frida\\]_KUGn[data-v-362edc6a]{transition:none}.target--\\[Frida\\]_9xFE.inactive--\\[Frida\\]_KUGn.fade--\\[Frida\\]_Cj2B[data-v-362edc6a],.target--\\[Frida\\]_9xFE.inactive--\\[Frida\\]_KUGn.fadeHorizontally--\\[Frida\\]_K25a[data-v-362edc6a]{opacity:0}.target--\\[Frida\\]_9xFE.inactive--\\[Frida\\]_KUGn.fadeHorizontally--\\[Frida\\]_K25a.next--\\[Frida\\]_hkgA[data-v-362edc6a]{transform:translate(30px)}.target--\\[Frida\\]_9xFE.inactive--\\[Frida\\]_KUGn.fadeHorizontally--\\[Frida\\]_K25a.previous--\\[Frida\\]_40Rw[data-v-362edc6a]{transform:translate(-30px)}.backdrop--\\[Frida\\]_dg\\+x[data-v-362edc6a]{background-color:#fff}",""]),r.locals={target:"target--[Frida]_9xFE",active:"active--[Frida]_M7-A",transitionDelay:"transitionDelay--[Frida]_ePiS",spamming:"spamming--[Frida]_6fD2",special:"special--[Frida]_yIws",fade:"fade--[Frida]_Cj2B",fadeHorizontally:"fadeHorizontally--[Frida]_K25a",last:"last--[Frida]_uP-v",next:"next--[Frida]_hkgA",previous:"previous--[Frida]_40Rw",inactive:"inactive--[Frida]_KUGn",backdrop:"backdrop--[Frida]_dg+x"},e.exports=r},function(e,t,n){"use strict";var r=n(379),o=n.n(r);n.d(t,"default",(function(){return o.a}))},function(e,t,n){var r=n(3)(!1);r.push([e.i,"[data-v-28cbc0aa]:export{sm:640;md:768;lg:1024;xl:1280;xxl:1736;vLg:900;zIndexForeground:600;zIndexBase:0;zIndexBackground:-300;zIndexBackdrop:300;zIndexPage:1300;zindexSecondaryNavigation:3300;zIndexPrimaryNavigation:4300;zIndexCurtain:5300;zIndexFullScreenFeatures:6300;zIndexModals:7300;zIndexNotifications:8300;zIndexBlocker:9300}.container--\\[Frida\\]_0rkU[data-v-28cbc0aa]{display:flex;flex-direction:row;align-items:flex-end;pointer-events:none}.array--\\[Frida\\]_KpmI[data-v-28cbc0aa]{--arrayFrameSize:12px;--arrayFramePadding:calc((var(--arrayFrameSize) - 2px) / 4);height:24px;width:100%;transform:translateY(calc(50% - (var(--arrayFrameSize) / 2)));pointer-events:all}.array--\\[Frida\\]_KpmI .frame--\\[Frida\\]_Z03b[data-v-28cbc0aa]{align-self:center;background-color:rgba(0,0,0,.25098039215686274);border-radius:99px;height:var(--arrayFrameSize)}.array--\\[Frida\\]_KpmI .controls--\\[Frida\\]_1My9[data-v-28cbc0aa]{height:100%;width:100%;padding-left:var(--arrayFramePadding);padding-right:var(--arrayFramePadding);display:flex;flex-direction:row;justify-content:space-between}.array--\\[Frida\\]_KpmI .element--\\[Frida\\]_x9Ur[data-v-28cbc0aa]{flex-grow:1;-webkit-flex-grow:1;padding-left:calc(var(--arrayFramePadding) + 1px);padding-right:calc(var(--arrayFramePadding) + 1px);transition:flex-grow .3s;display:flex}.lineWrapper--\\[Frida\\]_Q0SI[data-v-28cbc0aa]{width:100%;height:100%;justify-content:flex-end;align-items:center;display:flex}.lineWrapper--\\[Frida\\]_Q0SI.layer1--\\[Frida\\]_qa7a[data-v-28cbc0aa]{width:100%}.lineWrapper--\\[Frida\\]_Q0SI.layer2--\\[Frida\\]_TUXU[data-v-28cbc0aa]{width:100%;margin-left:-100%}.line--\\[Frida\\]_M-V2[data-v-28cbc0aa]{border-radius:99px;width:100%;height:2px;transition:opacity .3s ease-in-out,height .3s}.line--\\[Frida\\]_M-V2.base--\\[Frida\\]_ON8i[data-v-28cbc0aa]{background-color:#fff;opacity:.6}:not(.active--\\[Frida\\]_xRQT).element--\\[Frida\\]_x9Ur:hover .line--\\[Frida\\]_M-V2.base--\\[Frida\\]_ON8i[data-v-28cbc0aa]{opacity:1;width:100%}.line--\\[Frida\\]_M-V2.state--\\[Frida\\]_30Qr[data-v-28cbc0aa]{--widthAnimationDuration:calc(var(--autoPlayDuration) - 600ms);background-color:#fff;opacity:0;justify-self:flex-end;width:100%;visibility:hidden}.active--\\[Frida\\]_xRQT .line--\\[Frida\\]_M-V2.state--\\[Frida\\]_30Qr[data-v-28cbc0aa]{opacity:.9;visibility:visible}.active--\\[Frida\\]_xRQT.autoPlayActive--\\[Frida\\]_6Y6I .line--\\[Frida\\]_M-V2.state--\\[Frida\\]_30Qr[data-v-28cbc0aa]{transition:opacity .3s ease-in-out,height .3s,width var(--widthAnimationDuration) ease-in-out .3s;width:0}.container--\\[Frida\\]_0rkU:hover .line--\\[Frida\\]_M-V2[data-v-28cbc0aa]{height:3px}",""]),r.locals={container:"container--[Frida]_0rkU",array:"array--[Frida]_KpmI",frame:"frame--[Frida]_Z03b",controls:"controls--[Frida]_1My9",element:"element--[Frida]_x9Ur",lineWrapper:"lineWrapper--[Frida]_Q0SI",layer1:"layer1--[Frida]_qa7a",layer2:"layer2--[Frida]_TUXU",line:"line--[Frida]_M-V2",base:"base--[Frida]_ON8i",active:"active--[Frida]_xRQT",state:"state--[Frida]_30Qr",autoPlayActive:"autoPlayActive--[Frida]_6Y6I"},e.exports=r},function(e,t,n){e.exports=n.p+"img/signature.ecaa231.png"},function(e,t,n){"use strict";var r=n(380),o=n.n(r);n.d(t,"default",(function(){return o.a}))},function(e,t,n){var r=n(3)(!1);
1r.push([e.i,"[data-v-380cca06]:export{sm:640;md:768;lg:1024;xl:1280;xxl:1736;vLg:900;zIndexForeground:600;zIndexBase:0;zIndexBackground:-300;zIndexBackdrop:300;zIndexPage:1300;zindexSecondaryNavigation:3300;zIndexPrimaryNavigation:4300;zIndexCurtain:5300;zIndexFullScreenFeatures:6300;zIndexModals:7300;zIndexNotifications:8300;zIndexBlocker:9300}.container--\\[Frida\\]_j1Th[data-v-380cca06]{padding:0 var(--signature-margin) var(--signature-margin) 0;display:flex;justify-content:flex-end;align-items:flex-end}.signature--\\[Frida\\]_5Uxc[data-v-380cca06]{width:var(--signature-size);height:var(--signature-size)}",""]),r.locals={container:"container--[Frida]_j1Th",signature:"signature--[Frida]_5Uxc"},e.exports=r},function(e,t,n){"use strict";var r=n(381),o=n.n(r);n.d(t,"default",(function(){return o.a}))},function(e,t,n){var r=n(3)(!1);r.push([e.i,"[data-v-7c5871d0]:export{sm:640;md:768;lg:1024;xl:1280;xxl:1736;vLg:900;zIndexForeground:600;zIndexBase:0;zIndexBackground:-300;zIndexBackdrop:300;zIndexPage:1300;zindexSecondaryNavigation:3300;zIndexPrimaryNavigation:4300;zIndexCurtain:5300;zIndexFullScreenFeatures:6300;zIndexModals:7300;zIndexNotifications:8300;zIndexBlocker:9300}.container--\\[Frida\\]_jUpy[data-v-7c5871d0]{--controlHeight:30px;height:var(--controlHeight);width:200px}.container--\\[Frida\\]_jUpy .controls--\\[Frida\\]_6XwN[data-v-7c5871d0]{padding-left:calc(var(--controlHeight) / 2);padding-right:calc(var(--controlHeight) / 2);width:100%;height:100%;display:flex;flex-direction:row;justify-content:space-between;align-items:center;padding-bottom:4px;user-select:none}.container--\\[Frida\\]_jUpy .button--\\[Frida\\]_ZKrb[data-v-7c5871d0]{cursor:pointer;transition:color .3s;width:2em;text-align:end}.container--\\[Frida\\]_jUpy .button--\\[Frida\\]_ZKrb[data-v-7c5871d0]:hover{color:var(--highlight-color)}.container--\\[Frida\\]_jUpy .previous--\\[Frida\\]_0D9K[data-v-7c5871d0]{transform:scaleX(-1)}.container--\\[Frida\\]_jUpy .currentOfCount--\\[Frida\\]_xuST[data-v-7c5871d0]{display:flex}.container--\\[Frida\\]_jUpy .currentOfCount--\\[Frida\\]_xuST .number--\\[Frida\\]_pn5r[data-v-7c5871d0]{width:20px}.container--\\[Frida\\]_jUpy .currentOfCount--\\[Frida\\]_xuST .number--\\[Frida\\]_pn5r.current--\\[Frida\\]_t3wn[data-v-7c5871d0]{text-align:right}.container--\\[Frida\\]_jUpy .currentOfCount--\\[Frida\\]_xuST .number--\\[Frida\\]_pn5r.count--\\[Frida\\]_UiqZ[data-v-7c5871d0]{text-align:left}.container--\\[Frida\\]_jUpy .currentOfCount--\\[Frida\\]_xuST .slash--\\[Frida\\]_Mrjq[data-v-7c5871d0]{margin-left:4px;margin-right:4px}",""]),r.locals={container:"container--[Frida]_jUpy",controls:"controls--[Frida]_6XwN",button:"button--[Frida]_ZKrb",previous:"previous--[Frida]_0D9K",currentOfCount:"currentOfCount--[Frida]_xuST",number:"number--[Frida]_pn5r",current:"current--[Frida]_t3wn",count:"count--[Frida]_UiqZ",slash:"slash--[Frida]_Mrjq"},e.exports=r},function(e,t,n){"use strict";n.r(t);n(27),n(64);
1var r={name:"Slideshow",props:{slideshowIdentifier:{type:String,required:!0},transitionStyle:{type:String,default:"fade",validator:function(e){return["fade","fadeHorizontally"].includes(e)}},transitionDelay:{type:Boolean,default:!0},hideBackdrop:{type:Boolean,default:!1},isSecondary:{type:Boolean,default:!1},itemCount:{type:Number,required:!0}},data:function(){return{currentTarget:-1,lastTarget:-1,transitionDirection:"",targets:[0,0,0],spamming:!1,spammingTimeout:"",spammingIndicator:!1,spammingIndicatorTimeout:""}},computed:{slideshowCurrent:function(){return this.$store.getters["slideshow/getSlideshowCurrent"](this.slideshowIdentifier)},slideshowCount:function(){return this.$store.getters["slideshow/getSlideshowCount"](this.slideshowIdentifier)},slideshowLastDirection:function(){return this.$store.getters["slideshow/getSlideshowLastDirection"](this.slideshowIdentifier)}},watch:{slideshowCurrent:function(e,t){this.updateTargets(e,t)}},mounted:function(){!1===this.isSecondary&&this.commitSlideshowCount(),this.updateTargets(this.slideshowCurrent,this.slideshowCurrent)},methods:{updateTargets:function(e,t){var n=this;"next"===this.slideshowLastDirection?this.transitionDirection="next":"previous"===this.slideshowLastDirection?this.transitionDirection="previous":(e>t||t===this.slideshowCount-1&&0===e)&&!1==(0===t&&e===this.slideshowCount-1)?this.transitionDirection="next":this.transitionDirection=e!==t?"previous":"special",setTimeout((function(){n.lastTarget=n.currentTarget,n.currentTarget=(n.currentTarget+1)%3,n.targets[n.currentTarget]=e}),50),this.handleChangeSpamming()},commitSlideshowCount:function(){this.$store.commit("slideshow/setSlideshowCount",{identifier:this.slideshowIdentifier,count:this.itemCount})},isCurrentTarget:function(e){return this.currentTarget===e},isLastTarget:function(e){return this.lastTarget===e},isHeapTarget:function(e){return!1===(this.isCurrentTarget(e)||this.isLastTarget(e))},handleChangeSpamming:function(){var e=this;this.spammingIndicator&&(this.spamming=!0,clearTimeout(this.spammingTimeout),this.spammingTimeout=setTimeout((function(){e.spamming=!1}),900)),this.spammingIndicator=!0,clearTimeout(this.spammingIndicatorTimeout),this.spammingIndicatorTimeout=setTimeout((function(){e.spammingIndicator=!1}),900)}}},o=n(459),l=n(2);var component=Object(l.a)(r,(function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"layer"},[!1===e.hideBackdrop?n("div",{staticClass:"layer",class:e.$style.backdrop}):e._e(),e._v(" "),e._l(e.targets,(function(t,i){return n("div",{key:i,staticClass:"layer",class:[e.$style.target,e.isCurrentTarget(i)?e.$style.active:e.isLastTarget(i)?e.$style.last:e.$style.inactive,e.spamming?e.$style.spamming:"",e.$style[e.transitionDirection],e.$style[e.transitionStyle],e.transitionDelay?e.$style.transitionDelay:""]},[e._t("item-"+e.targets[i])],2)}))],2)}),[],!1,(function(e){this.$style=o.default.locals||o.default}),"362edc6a",null);t.default=component.exports},function(e,t,n){"use strict";n.r(t);n(64);
1var r={name:"SlideshowProgressBar",props:{slideshowIdentifier:{type:String,required:!0},deactivateAutoPlay:{type:Boolean,default:!0},autoPlayDuration:{type:Number,required:!1,default:5e3}},data:function(){return{autoPlay:!1}},computed:{slideshowCurrent:function(){return this.$store.getters["slideshow/getSlideshowCurrent"](this.slideshowIdentifier)},slideshowCount:function(){return this.$store.getters["slideshow/getSlideshowCount"](this.slideshowIdentifier)},autoPlayActive:function(){return!1===this.deactivateAutoPlay&&this.autoPlay}},watch:{autoPlay:function(e){!1===this.deactivateAutoPlay&&(e?this.startAutoPlay():this.stopAutoPlay())},deactivateAutoPlay:function(e){e?this.stopAutoPlay():this.startAutoPlay()}},mounted:function(){if(!1===this.deactivateAutoPlay){var e=this;setTimeout((function(){e.autoPlay=!0}),1e3)}},beforeDestroy:function(){this.stopAutoPlay()},methods:{handleIndicatorClick:function(e){this.$store.commit("slideshow/setSlideshowCurrent",{identifier:this.slideshowIdentifier,current:e}),this.autoPlay=!1,clearTimeout(this.pauseAutoPlayTimeout);var t=this;this.pauseAutoPlayTimeout=setTimeout((function(){t.autoPlay=!0}),6e3)},startAutoPlay:function(){this.stopAutoPlay();var e=this;null===this.autoPlayInterval&&(this.autoPlayInterval=setInterval((function(){e.autoPlay&&e.$store.commit("slideshow/nextSlide",{identifier:e.slideshowIdentifier})}),this.autoPlayDuration))},stopAutoPlay:function(){clearInterval(this.autoPlayInterval),this.autoPlayInterval=null}}},o=n(461),l=n(2);var component=Object(l.a)(r,(function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",e._g({staticClass:"layer",class:e.$style.container},e.$listeners),[n("div",{class:e.$style.array},[n("div",{staticClass:"layer"},[n("div",{staticClass:"layer"},[n("div",{class:e.$style.frame})]),e._v(" "),n("div",{staticClass:"layer"},[n("div",{class:e.$style.controls},e._l(e.slideshowCount,(function(t,i){return n("div",{key:i,class:[e.$style.element,i===e.slideshowCurrent?e.$style.active:"",e.autoPlayActive?e.$style.autoPlayActive:""],on:{click:function(t){e.handleIndicatorClick(i),t.stopImmediatePropagation()}}},[n("div",{class:[e.$style.lineWrapper,e.$style.layer1]},[n("div",{staticClass:"line via-background",class:[e.$style.line,e.$style.base]})]),e._v(" "),n("div",{class:[e.$style.lineWrapper,e.$style.layer2]},[n("div",{staticClass:"line via-background",class:[e.$style.line,e.$style.state],style:{"--autoPlayDuration":e.autoPlayDuration+"ms"}})])])})),0)])])])])}),[],!1,(function(e){this.$style=o.default.locals||o.default}),"28cbc0aa",null);t.default=component.exports},function(e,t,n){"use strict";n.r(t);
1var r={name:"SignatureLayer"},o=n(464),l=n(2);var component=Object(l.a)(r,(function(){var e=this,t=e.$createElement,r=e._self._c||t;return r("div",{staticClass:"layer",class:e.$style.container},[r("div",{class:e.$style.signature},[r("ImageLayer",{attrs:{alt:"Signature",src:n(463)}})],1)])}),[],!1,(function(e){this.$style=o.default.locals||o.default}),"380cca06",null);t.default=component.exports;installComponents(component,{ImageLayer:n(369).default})},function(e,t,n){"use strict";n.r(t);var r={name:"SlideshowControls",props:{slideshowIdentifier:{type:String,required:!0}},computed:{slideshowCurrent:function(){return this.$store.getters["slideshow/getSlideshowCurrent"](this.slideshowIdentifier)},slideshowCount:function(){return this.$store.getters["slideshow/getSlideshowCount"](this.slideshowIdentifier)}},mounted:function(){document.addEventListener("keydown",this.handleKeys)},beforeDestroy:function(){document.removeEventListener("keydown",this.handleKeys)},methods:{handleNextClick:function(){this.$store.commit("slideshow/nextSlide",{identifier:this.slideshowIdentifier})},handlePreviousClick:function(){this.$store.commit("slideshow/previousSlide",{identifier:this.slideshowIdentifier})},handleKeys:function(e){37===e.keyCode?this.handlePreviousClick():39===e.keyCode&&this.handleNextClick()}}},o=n(466),l=n(2);var component=Object(l.a)(r,(function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",e._g({staticClass:"layer",class:e.$style.container},e.$listeners),[n("Card",{attrs:{"border-radius":"99px"}},[n("div",{class:e.$style.controls},[n("div",{class:[e.$style.previous,e.$style.button],on:{click:e.handlePreviousClick}},[e._v("\n â\n ")]),e._v(" "),n("div",{class:e.$style.currentOfCount},[n("div",{class:[e.$style.number,e.$style.current]},[e._v("\n "+e._s(e.slideshowCurrent+1)+"\n ")]),e._v(" "),n("div",{class:e.$style.slash},[e._v("\n /\n ")]),e._v(" "),n("div",{class:[e.$style.number,e.$style.count]},[e._v("\n "+e._s(e.slideshowCount)+"\n ")])]),e._v(" "),n("div",{class:[e.$style.button],on:{click:e.handleNextClick}},[e._v("\n â\n ")])])])],1)}),[],!1,(function(e){this.$style=o.default.locals||o.default}),"7c5871d0",null);t.default=component.exports;installComponents(component,{Card:n(154).default})},function(e,t,n){"use strict";var r=n(382),o=n.n(r);n.d(t,"default",(function(){return o.a}))},function(e,t,n){var r=n(3)(!1);r.push([e.i,'[data-v-70cc3bc6]:export{sm:640;md:768;lg:1024;xl:1280;xxl:1736;vLg:900;zIndexForeground:600;zIndexBase:0;zIndexBackground:-300;zIndexBackdrop:300;zIndexPage:1300;zindexSecondaryNavigation:3300;zIndexPrimaryNavigation:4300;zIndexCurtain:5300;zIndexFullScreenFeatures:6300;zIndexModals:7300;zIndexNotifications:8300;zIndexBlocker:9300}.mediaElement--\\[Frida\\]_bpxx[data-v-70cc3bc6]{width:100%;height:100%;cursor:pointer}.mediaElement--\\[Frida\\]_bpxx .controls--\\[Frida\\]_AQTm[data-v-70cc3bc6]{display:grid;grid-template-areas:"progressbar signature";grid-template-columns:auto calc(var(--signature-size) + var(--signature-margin))}.mediaElement--\\[Frida\\]_bpxx .controls--\\[Frida\\]_AQTm .progressBar--\\[Frida\\]_QZFi[data-v-70cc3bc6]{grid-area:progressbar;z-index:3300;display:flex;flex-direction:row;align-items:flex-end;padding:var(--card-radius-perfect-spacing);pointer-events:none}.mediaElement--\\[Frida\\]_bpxx .controls--\\[Frida\\]_AQTm .signature--\\[Frida\\]_HlPV[data-v-70cc3bc6]{grid-area:signature;z-index:3000}.mediaElement--\\[Frida\\]_bpxx .hideBakedSignature--\\[Frida\\]_O6pA[data-v-70cc3bc6]{transform:scale(1.08)}.lightroom--\\[Frida\\]_crZP[data-v-70cc3bc6]{padding:max(var(--page-spacing),20px) var(--page-spacing) max(var(--page-spacing),20px) var(--page-spacing);grid-template-rows:30px var(--page-spacing) calc(100% - 30px - 32px - var(--page-spacing) - var(--page-spacing)) var(--page-spacing) 32px;grid-template-columns:100%;grid-template-areas:"upper-controls" "gap" "content" "gap2" "lower-controls"}.lightroom--\\[Frida\\]_crZP[data-v-70cc3bc6],.lightroom--\\[Frida\\]_crZP .content--\\[Frida\\]_ff73[data-v-70cc3bc6]{width:100%;height:100%;display:grid}.lightroom--\\[Frida\\]_crZP .content--\\[Frida\\]_ff73[data-v-70cc3bc6]{grid-area:content;margin:auto;max-width:1920px;grid-template-rows:100%;grid-template-columns:100%;grid-template-areas:"media"}.lightroom--\\[Frida\\]_crZP .content--\\[Frida\\]_ff73.useSideBySideLayout--\\[Frida\\]_HsA8[data-v-70cc3bc6]{grid-template-rows:100%;grid-template-columns:auto calc(var(--page-spacing)*2) 400px;
1grid-template-areas:"media divider information"}.lightroom--\\[Frida\\]_crZP .content--\\[Frida\\]_ff73 .mediaInformationContainer--\\[Frida\\]_-3Mz[data-v-70cc3bc6]{grid-area:1/1/1/1;width:100%;transform:translateX(0);opacity:1;transition:opacity .3s .2s,transform .3s .2s}.lightroom--\\[Frida\\]_crZP .content--\\[Frida\\]_ff73 .mediaInformationContainer--\\[Frida\\]_-3Mz.inactive--\\[Frida\\]_wzhH[data-v-70cc3bc6]{transition:opacity .3s 0s,transform .3s 0s;transform:translateY(60px);opacity:0}.lightroom--\\[Frida\\]_crZP .content--\\[Frida\\]_ff73 .mediaInformationContainer--\\[Frida\\]_-3Mz .slotContainer--\\[Frida\\]_kVIf[data-v-70cc3bc6]{display:flex;justify-content:center;align-items:center}.lightroom--\\[Frida\\]_crZP .content--\\[Frida\\]_ff73 .mediaInformationContainer--\\[Frida\\]_-3Mz .slot--\\[Frida\\]_bYe1[data-v-70cc3bc6]{width:100%;max-height:500px;max-width:400px;pointer-events:all}.lightroom--\\[Frida\\]_crZP .content--\\[Frida\\]_ff73 .mediaInformationContainer--\\[Frida\\]_-3Mz .additionalContent--\\[Frida\\]_LNq4[data-v-70cc3bc6]{padding-left:var(--card-spacing);padding-right:var(--card-spacing)}.lightroom--\\[Frida\\]_crZP .content--\\[Frida\\]_ff73 .mediaInformationContainer--\\[Frida\\]_-3Mz .additionalContent--\\[Frida\\]_LNq4 .showMediaButton--\\[Frida\\]_ZNzQ[data-v-70cc3bc6]{pointer-events:all;text-transform:lowercase;font-weight:200;cursor:pointer;margin-top:var(--card-spacing)}.lightroom--\\[Frida\\]_crZP .content--\\[Frida\\]_ff73.useSideBySideLayout--\\[Frida\\]_HsA8 .slot--\\[Frida\\]_bYe1[data-v-70cc3bc6]{height:500px}.lightroom--\\[Frida\\]_crZP .content--\\[Frida\\]_ff73.useSideBySideLayout--\\[Frida\\]_HsA8 .mediaInformationContainer--\\[Frida\\]_-3Mz[data-v-70cc3bc6]{grid-area:information}.lightroom--\\[Frida\\]_crZP .content--\\[Frida\\]_ff73 .mediaContainer--\\[Frida\\]_Vt7R[data-v-70cc3bc6]{grid-area:1/1/1/1;width:100%;height:100%;pointer-events:all;border-radius:13px;overflow:visible;transform:translateX(0);opacity:1;transition:opacity .3s .2s,transform .3s .2s}.lightroom--\\[Frida\\]_crZP .content--\\[Frida\\]_ff73 .mediaContainer--\\[Frida\\]_Vt7R.inactive--\\[Frida\\]_wzhH[data-v-70cc3bc6]{transition:opacity .3s 0s,transform .3s 0s;transform:translateY(-60px);opacity:0}.lightroom--\\[Frida\\]_crZP .content--\\[Frida\\]_ff73 .divider--\\[Frida\\]_pow0[data-v-70cc3bc6]{grid-area:divider;display:flex;justify-content:center;align-items:center}.lightroom--\\[Frida\\]_crZP .content--\\[Frida\\]_ff73 .divider--\\[Frida\\]_pow0 .slot--\\[Frida\\]_bYe1[data-v-70cc3bc6]{width:100%;max-height:600px}.lightroom--\\[Frida\\]_crZP .upperControls--\\[Frida\\]_lZTP[data-v-70cc3bc6]{z-index:7900;grid-area:upper-controls}.lightroom--\\[Frida\\]_crZP .lowerControls--\\[Frida\\]_8LRZ[data-v-70cc3bc6]{z-index:7900;grid-area:lower-controls;padding-bottom:2px}.lightroomCarouselItemImageWrapper--\\[Frida\\]_VS4S[data-v-70cc3bc6]{display:flex;justify-content:center;align-items:center}.lightroomCarouselItemImageSlot--\\[Frida\\]_9ckO[data-v-70cc3bc6]{max-width:1080px;max-height:1080px}.slideshowControlsWrapper--\\[Frida\\]_4uoX[data-v-70cc3bc6]{display:flex;align-items:flex-end;justify-content:center;animation:controlsAppear-data-v-70cc3bc6--\\[Frida\\]_JgNn .3s ease-out .3s;animation-fill-mode:both}.slideshowControlsWrapper--\\[Frida\\]_4uoX div~div[data-v-70cc3bc6]{margin-left:10px}.slideshowControlsWrapper--\\[Frida\\]_4uoX div[data-v-70cc3bc6]{pointer-events:all}@keyframes controlsAppear-data-v-70cc3bc6--\\[Frida\\]_JgNn{0%{transform:translateY(30px);opacity:0}to{transform:translateY(0);opacity:1}}.closeButtonWrapper--\\[Frida\\]_m1vZ[data-v-70cc3bc6]{height:30px;padding-left:0;padding-right:0;justify-self:flex-end;right:0;top:0;animation:closeAppear-data-v-70cc3bc6--\\[Frida\\]_V6Ne .3s ease-out .3s;animation-fill-mode:both;pointer-events:all}@keyframes closeAppear-data-v-70cc3bc6--\\[Frida\\]_V6Ne{0%{transform:translateY(-30px);opacity:0}to{transform:translateY(0);opacity:1}}.infoToggle--\\[Frida\\]_xnfv[data-v-70cc3bc6]{--controlHeight:30px;height:var(--controlHeight);width:30px}.infoToggle--\\[Frida\\]_xnfv.toggled--\\[Frida\\]_v4FL[data-v-70cc3bc6]{opacity:.65}.infoToggle--\\[Frida\\]_xnfv .controls--\\[Frida\\]_AQTm[data-v-70cc3bc6]{width:100%;height:100%;display:flex;flex-direction:row;justify-content:center;align-items:center;padding-bottom:3px;
1cursor:pointer;transition:color .3s}.infoToggle--\\[Frida\\]_xnfv .controls--\\[Frida\\]_AQTm[data-v-70cc3bc6]:hover{color:var(--highlight-color)}.infoToggle--\\[Frida\\]_xnfv .caption--\\[Frida\\]_u-ze[data-v-70cc3bc6]{text-align:center}',""]),r.locals={mediaElement:"mediaElement--[Frida]_bpxx",controls:"controls--[Frida]_AQTm",progressBar:"progressBar--[Frida]_QZFi",signature:"signature--[Frida]_HlPV",hideBakedSignature:"hideBakedSignature--[Frida]_O6pA",lightroom:"lightroom--[Frida]_crZP",content:"content--[Frida]_ff73",useSideBySideLayout:"useSideBySideLayout--[Frida]_HsA8",mediaInformationContainer:"mediaInformationContainer--[Frida]_-3Mz",inactive:"inactive--[Frida]_wzhH",slotContainer:"slotContainer--[Frida]_kVIf",slot:"slot--[Frida]_bYe1",additionalContent:"additionalContent--[Frida]_LNq4",showMediaButton:"showMediaButton--[Frida]_ZNzQ",mediaContainer:"mediaContainer--[Frida]_Vt7R",divider:"divider--[Frida]_pow0",upperControls:"upperControls--[Frida]_lZTP",lowerControls:"lowerControls--[Frida]_8LRZ",lightroomCarouselItemImageWrapper:"lightroomCarouselItemImageWrapper--[Frida]_VS4S",lightroomCarouselItemImageSlot:"lightroomCarouselItemImageSlot--[Frida]_9ckO",slideshowControlsWrapper:"slideshowControlsWrapper--[Frida]_4uoX","controlsAppear-data-v-70cc3bc6":"controlsAppear-data-v-70cc3bc6--[Frida]_JgNn",closeButtonWrapper:"closeButtonWrapper--[Frida]_m1vZ","closeAppear-data-v-70cc3bc6":"closeAppear-data-v-70cc3bc6--[Frida]_V6Ne",infoToggle:"infoToggle--[Frida]_xnfv",toggled:"toggled--[Frida]_v4FL",caption:"caption--[Frida]_u-ze"},e.exports=r},function(e,t,n){"use strict";n(401)},function(e,t,n){var r=n(3)(!1);r.push([e.i,".galleryCloseButton span{color:#fff;font-weight:500}.galleryCloseButton .closeCaption{font-weight:200;text-transform:lowercase;transform:translateY(-1px);margin-right:3px}",""]),r.locals={sm:"640",md:"768",lg:"1024",xl:"1280",xxl:"1736",vLg:"900",zIndexForeground:"600",zIndexBase:"0",zIndexBackground:"-300",zIndexBackdrop:"300",zIndexPage:"1300",zindexSecondaryNavigation:"3300",zIndexPrimaryNavigation:"4300",zIndexCurtain:"5300",zIndexFullScreenFeatures:"6300",zIndexModals:"7300",zIndexNotifications:"8300",zIndexBlocker:"9300"},e.exports=r},function(e,t,n){e.exports=n.p+"img/moi-new-1.52a84d1.jpg"},function(e,t,n){"use strict";var r=n(383),o=n.n(r);n.d(t,"default",(function(){return o.a}))},function(e,t,n){var r=n(3)(!1);r.push([e.i,"[data-v-ad56fc84]:export{sm:640;md:768;lg:1024;xl:1280;xxl:1736;vLg:900;zIndexForeground:600;zIndexBase:0;zIndexBackground:-300;zIndexBackdrop:300;zIndexPage:1300;zindexSecondaryNavigation:3300;zIndexPrimaryNavigation:4300;zIndexCurtain:5300;zIndexFullScreenFeatures:6300;zIndexModals:7300;zIndexNotifications:8300;zIndexBlocker:9300}.container--\\[Frida\\]_CLGa[data-v-ad56fc84]{display:flex;flex-direction:column}.title--\\[Frida\\]_1297[data-v-ad56fc84]{text-align:center;margin-bottom:1em;min-height:2em;font-size:1.2em;top:0}.description--\\[Frida\\]_YWVd[data-v-ad56fc84],.title--\\[Frida\\]_1297.noDescription--\\[Frida\\]_WXNd[data-v-ad56fc84]{margin-bottom:0}.description--\\[Frida\\]_YWVd[data-v-ad56fc84]{text-align:center;color:var(--primary-color);font-size:.9em;font-weight:200;height:0;transition-property:height,opacity;transition-duration:.3s;opacity:0;-webkit-font-smoothing:subpixel-antialiased}.description--\\[Frida\\]_YWVd.show--\\[Frida\\]_3oLh[data-v-ad56fc84]{height:2em;opacity:1}.image--\\[Frida\\]_IMC\\+[data-v-ad56fc84]{flex-grow:2;display:flex;justify-content:center;align-items:center}.image-position--\\[Frida\\]_vXwJ[data-v-ad56fc84]{position:absolute;width:100%;height:50%}.image-area--\\[Frida\\]_Jx3D[data-v-ad56fc84],.image-mask-area--\\[Frida\\]_Wzn6[data-v-ad56fc84]{transform:scale(1.02)}.image-mask-area--\\[Frida\\]_Wzn6[data-v-ad56fc84]{width:100%;height:100%;margin:auto;display:flex;justify-content:center;opacity:0}.categories--\\[Frida\\]_lmYz[data-v-ad56fc84]{align-self:flex-start}.categories--\\[Frida\\]_lmYz[data-v-ad56fc84],.type--\\[Frida\\]_BLl0[data-v-ad56fc84]{margin-bottom:.5em}.type--\\[Frida\\]_BLl0[data-v-ad56fc84]{align-self:flex-end}.dot--\\[Frida\\]_z9rM[data-v-ad56fc84]{display:none;position:absolute;border-radius:99px;width:6px;height:6px;right:25px;bottom:25px;background-color:#000}.pin-image--\\[Frida\\]_3syZ[data-v-ad56fc84]{width:59%;height:59%;margin:auto}.pin-image-container--\\[Frida\\]_wL9d[data-v-ad56fc84]{width:60px;height:60px;margin:auto;border-radius:25%;overflow:hidden}@media(min-width:768px){.pin-image-container--\\[Frida\\]_wL9d[data-v-ad56fc84]{width:70px;height:70px}}@media(min-width:1736px){.pin-image-container--\\[Frida\\]_wL9d[data-v-ad56fc84]{width:80px;height:80px}}.pin-image-container--\\[Frida\\]_wL9d.iconShadow--\\[Frida\\]_05CT[data-v-ad56fc84]{box-shadow:6px 6px 15px rgba(0,0,0,.19),3px 3px 5px rgba(0,0,0,.23)}.pin-image-container--\\[Frida\\]_wL9d.round--\\[Frida\\]_Wv5U[data-v-ad56fc84]{border-radius:999px}
1.kinesis-child--\\[Frida\\]_qkPZ[data-v-ad56fc84]{width:100%;height:100%;display:flex;justify-content:center}.externalLinkIcon--\\[Frida\\]_1eus[data-v-ad56fc84]{width:1em;height:1em;display:inline-flex;align-self:center;top:.125em;position:relative;color:inherit}.externalLinkIcon--\\[Frida\\]_1eus[data-v-ad56fc84],.svgWrapper--\\[Frida\\]_dSPh[data-v-ad56fc84]{user-select:none;-moz-user-select:none}.svgWrapper--\\[Frida\\]_dSPh[data-v-ad56fc84]{width:100%;height:100%}",""]),r.locals={container:"container--[Frida]_CLGa",title:"title--[Frida]_1297",description:"description--[Frida]_YWVd",noDescription:"noDescription--[Frida]_WXNd",show:"show--[Frida]_3oLh",image:"image--[Frida]_IMC+","image-position":"image-position--[Frida]_vXwJ","image-area":"image-area--[Frida]_Jx3D","image-mask-area":"image-mask-area--[Frida]_Wzn6",categories:"categories--[Frida]_lmYz",type:"type--[Frida]_BLl0",dot:"dot--[Frida]_z9rM","pin-image":"pin-image--[Frida]_3syZ","pin-image-container":"pin-image-container--[Frida]_wL9d",iconShadow:"iconShadow--[Frida]_05CT",round:"round--[Frida]_Wv5U","kinesis-child":"kinesis-child--[Frida]_qkPZ",externalLinkIcon:"externalLinkIcon--[Frida]_1eus",svgWrapper:"svgWrapper--[Frida]_dSPh"},e.exports=r},function(e,t,n){"use strict";n.r(t);
1var r={name:"ExternalProjectPageCard",components:{ProjectPinCard:n(388).default},props:{metadata:{type:Object}},computed:{icon:function(){var e,t;return(null===(e=this.metadata.project.promotion)||void 0===e||null===(t=e.icon)||void 0===t?void 0:t.source)||""}}},o=n(2),component=Object(o.a)(r,(function(){var e=this,t=e.$createElement;return(e._self._c||t)("ProjectPinCard",{attrs:{to:e.metadata.project.identity.externalProjectUrl||"",title:"Project Page",icon:e.icon,"show-external-source-icon":"","hide-description":"","fitty-size-factor":1}})}),[],!1,null,null,null);t.default=component.exports;installComponents(component,{ProjectPinCard:n(388).default})},function(e,t,n){"use strict";var r=n(384),o=n.n(r);n.d(t,"default",(function(){return o.a}))},function(e,t,n){var r=n(3)(!1);r.push([e.i,'[data-v-5baa0a83]:export{zIndexForeground:600;zIndexBase:0;zIndexBackground:-300;zIndexBackdrop:300;zIndexPage:1300;zindexSecondaryNavigation:3300;zIndexPrimaryNavigation:4300;zIndexCurtain:5300;zIndexFullScreenFeatures:6300;zIndexModals:7300;zIndexNotifications:8300;zIndexBlocker:9300;sm:640;md:768;lg:1024;xl:1280;xxl:1736;vLg:900}.container--\\[Frida\\]_uoE\\+[data-v-5baa0a83]{width:100%;max-width:620px;padding-bottom:var(--page-bottom-margin)}.container--\\[Frida\\]_uoE\\+.windowView--\\[Frida\\]_ms3s[data-v-5baa0a83]{padding-bottom:0;max-width:1920px}.primaryCardWrapper--\\[Frida\\]_3cXC[data-v-5baa0a83]{padding:var(--content-card-padding)}.cover--\\[Frida\\]_044J[data-v-5baa0a83]{grid-area:cover;display:flex;flex-direction:column;justify-content:center;align-content:center;height:auto;min-height:max(50vh,500px);max-width:1350px;width:100%;margin-bottom:64px;padding-left:calc(var(--article-spacing) * .64);padding-right:calc(var(--article-spacing) * .64)}.windowView--\\[Frida\\]_ms3s .cover--\\[Frida\\]_044J[data-v-5baa0a83]{margin:auto;padding-left:calc(min(calc(1920px * .075), calc(100vw * .075)) - var(--page-spacing));padding-right:calc(min(calc(1920px * .075), calc(100vw * .075)) - var(--page-spacing));transform:translateY(calc(var(--page-top-margin) * -.5))}@media(min-width:1280px){.cover--\\[Frida\\]_044J[data-v-5baa0a83]{height:100vh}}.iconMediaWrapper--\\[Frida\\]_XQiM[data-v-5baa0a83]{width:100%;height:100%;transform-origin:center center;transform:scale(1.05)}.nextSteps--\\[Frida\\]_hd8J[data-v-5baa0a83]{position:relative;width:100%;display:grid;margin:0;grid-gap:var(--grid-spacing);margin-top:var(--grid-spacing);grid-template-columns:calc(calc(100% - calc(calc(2 - 1) * var(--grid-spacing))) / 2) calc(calc(100% - calc(calc(2 - 1) * var(--grid-spacing))) / 2);grid-template-rows:auto;grid-template-areas:"previewone previewtwo"}@media(min-width:768px){.nextSteps--\\[Frida\\]_hd8J[data-v-5baa0a83]{grid-template-columns:calc(calc(100% - calc(calc(3 - 1) * var(--grid-spacing))) / 3) calc(calc(100% - calc(calc(3 - 1) * var(--grid-spacing))) / 3) calc(calc(100% - calc(calc(3 - 1) * var(--grid-spacing))) / 3);grid-template-rows:auto;grid-template-areas:"previewone previewtwo previewthree"}}.divider--\\[Frida\\]_kArz[data-v-5baa0a83]{grid-area:divider}.gridItem--\\[Frida\\]_94av.content--\\[Frida\\]_kbHN[data-v-5baa0a83]{grid-area:content}.gridItem--\\[Frida\\]_94av.previewOne--\\[Frida\\]_MM-i[data-v-5baa0a83]{grid-area:previewone}.gridItem--\\[Frida\\]_94av.previewTwo--\\[Frida\\]_1-Gq[data-v-5baa0a83]{grid-area:previewtwo}.gridItem--\\[Frida\\]_94av.previewThree--\\[Frida\\]_4QAE[data-v-5baa0a83]{grid-area:previewthree}',""]),r.locals={container:"container--[Frida]_uoE+",windowView:"windowView--[Frida]_ms3s",primaryCardWrapper:"primaryCardWrapper--[Frida]_3cXC",cover:"cover--[Frida]_044J",iconMediaWrapper:"iconMediaWrapper--[Frida]_XQiM",nextSteps:"nextSteps--[Frida]_hd8J",divider:"divider--[Frida]_kArz",gridItem:"gridItem--[Frida]_94av",content:"content--[Frida]_kbHN",previewOne:"previewOne--[Frida]_MM-i",previewTwo:"previewTwo--[Frida]_1-Gq",previewThree:"previewThree--[Frida]_4QAE"},e.exports=r},function(e,t,n){"use strict";n.r(t);var r=n(80),o={name:"MastodonLink",created:function(){this.URL=r.c}},l=n(2),component=Object(l.a)(o,(function(){var e=this,t=e.$createElement;return(e._self._c||t)("Hyperlink",{attrs:{to:e.URL}},[e._v("Mastodon")])}),[],!1,null,null,null);t.default=component.exports;installComponents(component,{Hyperlink:n(63).default})},function(e,t,n){var content=n(499);
1content.__esModule&&(content=content.default),"string"==typeof content&&(content=[[e.i,content,""]]),content.locals&&(e.exports=content.locals);(0,n(4).default)("168119ed",content,!0,{sourceMap:!1})},function(e,t,n){"use strict";n.r(t);n(26),n(23),n(31),n(38),n(39);var r=n(18),o=n(79),l=n(359),c=n(389);function d(object,e){var t=Object.keys(object);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(object);e&&(n=n.filter((function(e){return Object.getOwnPropertyDescriptor(object,e).enumerable}))),t.push.apply(t,n)}return t}var m=function(e){for(var i=1;i<arguments.length;i++){var source=null!=arguments[i]?arguments[i]:{};i%2?d(Object(source),!0).forEach((function(t){Object(r.a)(e,t,source[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(source)):d(Object(source)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(source,t))}))}return e}({name:"ArticleLayout",components:{PortalTarget:o.PortalTarget},props:{metadata:{type:Object,required:!0}},data:function(){return{coverIsVisible:!0}},computed:{projectMetadata:function(){return Object(l.s)(this.metadata)},showWindow:function(){return this.$store.state.window.showWindow},scrolled:function(){return this.$responsive.scroll.scrolled},scrolledAtLeastOneCover:function(){return this.$responsive.scroll.scrolledAtLeastOneCover},scrolledToEnd:function(){return this.$responsive.scroll.scrolledToEnd},pageMetadata:function(){return this.metadata?Object(l.o)(this.metadata):""},viewportCharacteristics:function(){return{breakpoint:this.$breakpoints.is,landscape:this.$responsive.orientation.landscape}},hasAbstract:function(){return void 0!==Object(l.m)(this.metadata)&&!1!==Object(l.m)(this.metadata)&&""!==Object(l.m)(this.metadata)},useIcon:function(){var e,t;return!1===this.hasAbstract&&void 0!==(null===(e=Object(l.s)(this.metadata))||void 0===e||null===(t=e.promotion)||void 0===t?void 0:t.icon)},iconSource:function(){return Object(l.s)(this.metadata).promotion.icon.source}},watch:{scrolled:function(e){e?this.$store.commit("background/setSubtleBackgroun
1d"):this.showWindow?this.$store.commit("background/setNormalBackground"):this.$store.commit("background/setSubtleBackground")},viewportCharacteristics:function(){this.handleViewportChanges()}},beforeMount:function(){!1===this.scrolled?this.$store.commit("background/setNormalBackground"):this.$store.commit("background/setSubtleBackground"),this.$store.commit("window/clearActiveWindowElement"),this.$store.commit("layout/setFreeLayout")},mounted:function(){this.handleViewportChanges()},methods:{coverVisibilityChanged:function(e,t){this.coverIsVisible=e},handleViewportChanges:function(){this.$breakpoints.xl&&this.$responsive.orientation.landscape?this.$store.commit("window/show"):(this.$store.commit("window/hide"),this.$store.commit("background/setSubtleBackground"))}}},Object(c.a)()),h=m,f=n(498),v=(n(500),n(2));var component=Object(v.a)(h,(function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{class:[e.$style.container,e.showWindow?e.$style.windowView:""]},[n("div",{class:[e.$style.cover]},[n("client-only",[n("PageCover",{attrs:{metadata:e.metadata,"use-vertical-layout":!1===e.showWindow,"show-abstract":e.hasAbstract,"show-banner":e.hasAbstract||e.useIcon,"use-icon":e.useIcon,"auto-width":e.useIcon}})],1)],1),e._v(" "),e.useIcon?n("Portal",{attrs:{to:"cover-banner"}},[n("div",{class:e.$style.iconMediaWrapper},[n("MediaVessel",{attrs:{items:[{source:e.iconSource,type:"image"}],"hide-signature":"","no-lightroom-view":"","load-always":""}})],1)]):e._e(),e._v(" "),n("PaperFeedLayout",{attrs:{metadata:e.metadata}},[e._t("default")],2)],1)}),[],!1,(function(e){this.$style=f.default.locals||f.default}),"46385287",null);t.default=component.exports;installComponents(component,{PageCover:n(403).default,MediaVessel:n(394).default,PaperFeedLayout:n(415).default})},function(e,t,n){"use strict";var r,o=new Uint8Array(16);function l(){if(!r&&!(r="undefined"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||"undefined"!=typeof msCrypto&&"function"==typeof msCrypto.getRandomValues&&msCrypto.getRandomValues.bind(msCrypto)))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return r(o)}var c=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;for(var d=function(e){return"string"==typeof e&&c.test(e)},m=[],h=0;h<256;++h)m.push((h+256).toString(16).substr(1));var f=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,n=(m[e[t+0]]+m[e[t+1]]+m[e[t+2]]+m[e[t+3]]+"-"+m[e[t+4]]+m[e[t+5]]+"-"+m[e[t+6]]+m[e[t+7]]+"-"+m[e[t+8]]+m[e[t+9]]+"-"+m[e[t+10]]+m[e[t+11]]+m[e[t+12]]+m[e[t+13]]+m[e[t+14]]+m[e[t+15]]).toLowerCase();if(!d(n))throw TypeError("Stringified UUID is invalid");return n};t.a=function(e,t,n){var r=(e=e||{}).random||(e.rng||l)();if(r[6]=15&r[6]|64,r[8]=63&r[8]|128,t){n=n||0;for(var i=0;i<16;++i)t[n+i]=r[i];return t}return f(r)}},function(e,t,n){var content=n(582);content.__esModule&&(content=content.default),"string"==typeof content&&(content=[[e.i,content,""]]),content.locals&&(e.exports=content.locals);(0,n(4).default)("1b92529e",content,!0,{sourceMap:!1})},function(e,t,n){var content=n(584);content.__esModule&&(content=content.default),"string"==typeof content&&(content=[[e.i,content,""]]),content.locals&&(e.exports=content.locals);(0,n(4).default)("3dbaea54",content,!0,{sourceMap:!1})},function(e,t,n){var content=n(501);content.__esModule&&(content=content.default),"string"==typeof content&&(content=[[e.i,content,""]]),content.locals&&(e.exports=content.locals);(0,n(4).default)("c925b242",content,!0,{sourceMap:!1})},,function(e,t,n){var content=n(593);content.__esModule&&(content=content.default),"string"==typeof content&&(content=[[e.i,content,""]]),content.locals&&(e.exports=content.locals);(0,n(4).default)("d6662ae0",content,!0,{sourceMap:!1})},,function(e,t,n){var content=n(659);content.__esModule&&(content=content.default),"string"==typeof content&&(content=[[e.i,content,""]]),content.locals&&(e.exports=content.locals);(0,n(4).default)("267298a8",content,!0,{sourceMap:!1})},function(e,t,n){var content=n(728);
1content.__esModule&&(content=content.default),"string"==typeof content&&(content=[[e.i,content,""]]),content.locals&&(e.exports=content.locals);(0,n(4).default)("b737c1b0",content,!0,{sourceMap:!1})},function(e,t,n){var content=n(745);content.__esModule&&(content=content.default),"string"==typeof content&&(content=[[e.i,content,""]]),content.locals&&(e.exports=content.locals);(0,n(4).default)("a44d97ec",content,!0,{sourceMap:!1})},,function(e,t,n){var content=n(833);content.__esModule&&(content=content.default),"string"==typeof content&&(content=[[e.i,content,""]]),content.locals&&(e.exports=content.locals);(0,n(4).default)("e20b5648",content,!0,{sourceMap:!1})},function(e,t,n){e.exports=n.p+"img/guess-the-distance.2577195.png"},function(e,t,n){"use strict";var r=n(483),o=n.n(r);n.d(t,"default",(function(){return o.a}))},function(e,t,n){var r=n(3)(!1);r.push([e.i,"[data-v-46385287]:export{zIndexForeground:600;zIndexBase:0;zIndexBackground:-300;zIndexBackdrop:300;zIndexPage:1300;zindexSecondaryNavigation:3300;zIndexPrimaryNavigation:4300;zIndexCurtain:5300;zIndexFullScreenFeatures:6300;zIndexModals:7300;zIndexNotifications:8300;zIndexBlocker:9300;sm:640;md:768;lg:1024;xl:1280;xxl:1736;vLg:900}.container--\\[Frida\\]_hbZn[data-v-46385287]{height:auto;width:100%;max-width:660px;margin:0 auto;padding-left:0;padding-right:0;padding-bottom:var(--page-bottom-margin)}.container--\\[Frida\\]_hbZn.windowView--\\[Frida\\]_zX-8[data-v-46385287]{padding-bottom:0;max-width:1920px}.cover--\\[Frida\\]_MD7W[data-v-46385287]{grid-area:cover;display:flex;flex-direction:column;justify-content:center;align-content:center;height:auto;min-height:100vh;max-width:1350px;width:100%;margin-bottom:64px;padding-left:calc(var(--article-spacing) * .64);padding-right:calc(var(--article-spacing) * .64)}.windowView--\\[Frida\\]_zX-8 .cover--\\[Frida\\]_MD7W[data-v-46385287]{margin:auto;padding-left:calc(min(calc(1920px * .075), calc(100vw * .075)) - var(--page-spacing));padding-right:calc(min(calc(1920px * .075), calc(100vw * .075)) - var(--page-spacing));transform:translateY(calc(var(--page-top-margin) * -.5))}.iconMediaWrapper--\\[Frida\\]_NZob[data-v-46385287]{width:100%;height:100%;transform-origin:center center;transform:scale(1.05)}.feed--\\[Frida\\]_td2l[data-v-46385287]{grid-area:feed;width:100%;z-index:250}.window--\\[Frida\\]_Jt3u[data-v-46385287]{grid-area:window;position:sticky;top:0;height:100vh;min-width:100px;margin-top:calc((100vh - calc(calc(min(calc(1920px * calc(calc(1 - calc(3 * .075)) / 2)), calc(100vw * calc(calc(1 - calc(3 * .075)) / 2))) / 10) * 8)) / -2);margin-bottom:calc((100vh - calc(calc(min(calc(1920px * calc(calc(1 - calc(3 * .075)) / 2)), calc(100vw * calc(calc(1 - calc(3 * .075)) / 2))) / 10) * 8)) / -2)}.window--\\[Frida\\]_Jt3u[data-v-46385287],.windowContainer--\\[Frida\\]_HaI1[data-v-46385287]{display:flex;align-content:center;justify-content:center;flex-direction:column}.windowFrame--\\[Frida\\]_kALO[data-v-46385287]{width:100%;height:100px;display:flex;flex-direction:column}.windowFrame--\\[Frida\\]_kALO.upper--\\[Frida\\]_T0Qp[data-v-46385287]{align-self:end;margin-bottom:8px;align-content:flex-end;justify-content:flex-end}.windowFrame--\\[Frida\\]_kALO.lower--\\[Frida\\]_BIqS[data-v-46385287]{align-self:end;margin-top:8px;align-content:flex-start;justify-content:flex-start}.title--\\[Frida\\]_gU4P[data-v-46385287]{font-size:1.2em}.windowFrameElement--\\[Frida\\]_TQtl[data-v-46385287]{transition:all .4s ease-out;opacity:0}.upper--\\[Frida\\]_T0Qp .windowFrameElement--\\[Frida\\]_TQtl[data-v-46385287]{transform:translateY(-37px);margin-bottom:8px}.upper--\\[Frida\\]_T0Qp .windowFrameElement--\\[Frida\\]_TQtl.breadcrumbs--\\[Frida\\]_O5QI[data-v-46385287]{margin-bottom:11px}.lower--\\[Frida\\]_BIqS .windowFrameElement--\\[Frida\\]_TQtl[data-v-46385287]{transform:translateY(37px);margin-top:8px}.lower--\\[Frida\\]_BIqS .windowFrameElement--\\[Frida\\]_TQtl.utilityBar--\\[Frida\\]_pLXn[data-v-46385287]{margin-top:-3px}.active--\\[Frida\\]_OHie .windowFrameElement--\\[Frida\\]_TQtl.first--\\[Frida\\]_y0Yr[data-v-46385287],.window
1FrameElement--\\[Frida\\]_TQtl.first--\\[Frida\\]_y0Yr[data-v-46385287],.windowFrameElement--\\[Frida\\]_TQtl.second--\\[Frida\\]_Wksr[data-v-46385287]{transition-delay:0s}.active--\\[Frida\\]_OHie .windowFrameElement--\\[Frida\\]_TQtl.second--\\[Frida\\]_Wksr[data-v-46385287]{transition-delay:.1s}.windowFrameElement--\\[Frida\\]_TQtl.third--\\[Frida\\]_nMwM[data-v-46385287]{transition-delay:0s}.active--\\[Frida\\]_OHie .windowFrameElement--\\[Frida\\]_TQtl.third--\\[Frida\\]_nMwM[data-v-46385287]{transition-delay:.2s}.active--\\[Frida\\]_OHie .windowFrameElement--\\[Frida\\]_TQtl[data-v-46385287]{transform:translateY(0);opacity:1}",""]),r.locals={container:"container--[Frida]_hbZn",windowView:"windowView--[Frida]_zX-8",cover:"cover--[Frida]_MD7W",iconMediaWrapper:"iconMediaWrapper--[Frida]_NZob",feed:"feed--[Frida]_td2l",window:"window--[Frida]_Jt3u",windowContainer:"windowContainer--[Frida]_HaI1",windowFrame:"windowFrame--[Frida]_kALO",upper:"upper--[Frida]_T0Qp",lower:"lower--[Frida]_BIqS",title:"title--[Frida]_gU4P",windowFrameElement:"windowFrameElement--[Frida]_TQtl",breadcrumbs:"breadcrumbs--[Frida]_O5QI",utilityBar:"utilityBar--[Frida]_pLXn",active:"active--[Frida]_OHie",first:"first--[Frida]_y0Yr",second:"second--[Frida]_Wksr",third:"third--[Frida]_nMwM"},e.exports=r},function(e,t,n){"use strict";n(488)},function(e,t,n){var r=n(3)(!1);r.push([e.i,".window-fade{opacity:.5}.window-fade-enter-active,.window-fade-leave-active{grid-area:1/1/1/1;transition:all 1s ease;overflow:hidden}.window-fade-enter{opacity:0;overflow:hidden}.window-fade-enter-to,.window-fade-leave{opacity:1;overflow:hidden}.window-fade-leave-to{opacity:0;overflow:hidden}",""]),r.locals={sm:"640",md:"768",lg:"1024",xl:"1280",xxl:"1736",vLg:"900",zIndexForeground:"600",zIndexBase:"0",zIndexBackground:"-300",zIndexBackdrop:"300",zIndexPage:"1300",zindexSecondaryNavigation:"3300",zIndexPrimaryNavigation:"4300",zIndexCurtain:"5300",zIndexFullScreenFeatures:"6300",zIndexModals:"7300",zIndexNotifications:"8300",zIndexBlocker:"9300"},e.exports=r},function(e,t,n){e.exports=n.p+"img/singleton-mono-behaviour-for-unity_code-snippet-02.9186db5.png"},function(e,t,n){e.exports=n.p+"img/knowledge-graph_schema.5e5271d.png"},function(e,t,n){e.exports=n.p+"img/gamespace-knowledge-graph_poster.5082e5a.png"},,function(e,t,n){"use strict";n.r(t);n(159);var r={name:"Citation",props:{citations:{type:Array,required:!0},references:{type:Array,required:!0}},methods:{getReference:function(e){return this.references.find((function(element){return element.key===e.key}))}}},o=n(581),l=n(2);var component=Object(l.a)(r,(function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("span",{class:e.$style.citation},[e._v("("),e._l(e.citations,(function(t,i){return n("span",{key:i,class:e.$style.reference},[n("Hyperlink",{attrs:{hash:"reference-"+e.getReference(t).key}},[e._v(e._s(e.getReference(t).citationAuthor)+", "+e._s(e.getReference(t).citationYear)),e.citations.page?n("span",[e._v(", "+e._s(e.citations.page))]):e._e()])],1)})),e._v(")")],2)}),[],!1,(function(e){this.$style=o.default.locals||o.default}),"85871396",null);t.default=component.exports;installComponents(component,{Hyperlink:n(63).default})},function(e,t,n){"use strict";n.r(t);
1var r={name:"ListOfReferences",props:{references:{type:Array,required:!0}},methods:{getReferenceDescription:function(e){return e.description}}},o=n(583),l=n(2);var component=Object(l.a)(r,(function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("ul",e._l(e.references,(function(t,i){return n("li",{key:i,attrs:{id:"reference-"+t.key}},[e._v("\n "+e._s(e.getReferenceDescription(t))+"\n ")])})),0)}),[],!1,(function(e){this.$style=o.default.locals||o.default}),"87c360c8",null);t.default=component.exports},function(e,t,n){"use strict";n.r(t);var r={name:"GameAnalysisSeminarProjects"},o=n(2),component=Object(o.a)(r,(function(){var e=this,t=e.$createElement;e._self._c;return e._m(0)}),[function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("ul",[n("li",[e._v('"Creating Fairer Games In Counter-Strike Through Level Design Patterns" by Nicolas Teofilovic, 2022')]),e._v(" "),n("li",[e._v('"The Layers of Accessibilty in Games" by Nathalie Maria Galla, 2022')]),e._v(" "),n("li",[e._v('"Character Customization in MMORPGs: Exploring Player Motivations in Final Fantasy XIV" by Manuela Poschenrieder, 2022')]),e._v(" "),n("li",[e._v('"Graph-based Visualization and Pattern Finding: Raids in World of Warcraft" by Laura Marsoner, 2022')]),e._v(" "),n("li",[e._v('"Being Yourself: Women in Video Games" by Lorena K. Vitale, 2021')]),e._v(" "),n("li",[e._v("\"Graph-based Analysis of 'Among Us'\" by Pascal Neubert, 2021")]),e._v(" "),n("li",[e._v('\n "Modding and Scripting as âSerious Game Mechanicâ - Analyzing the Script Editor of X3:Terran\n Conflict" by Philipp Mueller, 2021\n ')]),e._v(" "),n("li",[e._v('"Analysis of the map from League of Legends" by Franz Kleber, 2021')]),e._v(" "),n("li",[e._v('\n "Graph-based Analysis of The Legend of Zelda: A Link to the Past: Backtracking and Dungeon Design"\n by Julian Geheeb, 2020\n ')]),e._v(" "),n("li",[e._v('"Analysis and Classification of Walking Simulator" by Maximiliane Münch, 2020')]),e._v(" "),n("li",[e._v('"What makes a good Antagonist?" by André Wörle, 2020')])])}],!1,null,"275d0e36",null);t.default=component.exports},function(e,t,n){"use strict";n.r(t);
1var r={name:"MasterLabCourseProjectList"},o=n(2),component=Object(o.a)(r,(function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("ul",[n("li",[n("b",[e._v("Off Course:")]),e._v(" This project was developed across two of my practical courses,\n "),n("Hyperlink",{attrs:{to:"/teaching/level-engineering"}},[e._v("Level Engineering")]),e._v(" and\n "),n("Hyperlink",{attrs:{to:"/teaching/immersive-storytelling-games"}},[e._v("Immersive Storytelling: Games")]),e._v(".\n You can find more information on the\n "),n("Hyperlink",{attrs:{to:"https://store.steampowered.com/app/3886730/Off_Course/"}},[e._v("Steam Page")]),e._v(".\n ")],1),e._v(" "),n("li",[n("b",[e._v("Oku:")]),e._v(" Originally developed as a prototype by "),n("Hyperlink",{attrs:{to:"https://www.linkedin.com/in/claudio-belloni-762717309/"}},[e._v("Claudio Belloni")]),e._v(" during his masterâs practical course in "),n("Hyperlink",{attrs:{to:"/teaching/level-engineering"}},[e._v("Level Engineering")]),e._v(", the project was later discovered by "),n("Hyperlink",{attrs:{to:"https://irox-games.com/"}},[e._v("Irox Games")]),e._v(", which is now developing the full game. More information is available on its\n "),n("Hyperlink",{attrs:{to:"https://store.steampowered.com/app/3590650/OKU/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Steam page")]),e._v(".\n ")],1),e._v(" "),n("li",[n("b",[e._v("Thomas Ireham in Crimson Spotlight:")]),e._v(" The first iteration of this project was developed in the context of\n "),n("Hyperlink",{attrs:{to:"/teaching/immersive-storytelling-games"}},[e._v("Immersive Storytelling: Games")]),e._v(" and subsequently further continued. You can find more information on the\n "),n("Hyperlink",{attrs:{to:"https://store.steampowered.com/app/4176940/Thomas_Ireham_in_Crimson_Spotlight/"}},[e._v("Steam Page")]),e._v(".\n ")],1),e._v(" "),n("li",[n("b",[e._v("Godot Coop Platformer:")]),e._v(" This project was developed in the context of a master practical course focused on topics from the course "),n("Hyperlink",{attrs:{to:"/teaching/immersive-storytelling-games"}},[e._v("Interaction Methods and Devices")]),e._v(".\n You can find more information on the project's\n "),n("Hyperlink",{attrs:{to:"https://the-fifth-king.itch.io/godot-coop-platformer"}},[e._v("Itch.io Page")]),e._v(".\n ")],1),e._v(" "),n("li",[n("b",[e._v("The Daily Truth:")]),e._v(" This project was developed in the context of\n "),n("Hyperlink",{attrs:{to:"/teaching/immersive-storytelling-games"}},[e._v("Immersive Storytelling: Games")]),e._v(".\n You can find more information on the\n "),n("Hyperlink",{attrs:{to:"https://the-fifth-king.itch.io/the-daily-truth"}},[e._v("Itch.io Page")]),e._v(".\n ")],1),e._v(" "),n("li",[n("b",[e._v("Forgotten Colors:")]),e._v(" This project was developed in the context of\n "),n("Hyperlink",{attrs:{to:"/teaching/immersive-storytelling-games"}},[e._v("Immersive Storytelling: Games")]),e._v(". You can find more information on their\n "),n("Hyperlink",{attrs:{to:"https://felipe-lucas.itch.io/forgotten-colors"}},[e._v("Itch.io Page")]),e._v(".\n ")],1),e._v(" "),n("li",[n("Hyperlink",{attrs:{to:"https://collab.dvb.bayern/x/BaGjB"}},[n("b",[e._v("Daruma")])]),e._v(" with Julian Geheeb, Dominik Huber and Anonymous. 2023")],1),e._v(" "),n("li",[n("Hyperlink",{attrs:{to:"https://wiki.tum.de/x/OogBS"}},[n("b",[e._v("Infiltrate the Castle")])]),e._v(" with Jan Eberle, Felix Kosian, Felix Stieglbauer, Nikola Tomic. 2022")],1),e._v(" "),n("li",[n("Hyperlink",{attrs:{to:"https://wiki.tum.de/x/bASyIw"}},[n("b",[e._v("Shattered World")])]),e._v(" with Marian Ludwig, Moritz Naser, Jakob Raith, Akbar Suriaganda. 2020")],1)])}),[],!1,null,"d9d48da6",null);t.default=component.exports;installComponents(component,{Hyperlink:n(63).default})},function(e,t,n){e.exports=n.p+"videos/first-person-controller-for-unity_reel.76144cb.webm"},function(e,t,n){e.exports=n.p+"videos/first-person-controller-for-unity_reel_fallback.cf8a84f.mp4"},function(e,t,n){e.exports=n.p+"img/first-person-controller-for-unity_reel_poster.127bfb1.jpg"},function(e,t,n){e.exports=n.p+"videos/guess-the-distance_reel.39e18df.webm"},function(e,t,n){e.exports=n.p+"videos/guess-the-distance_reel_fallback.f29600b.mp4"},function(e,t,n){e.exports=n.p+"img/guess-the-distance_reel_poster.049c382.jpg"},function(e,t,n){e.exports=n.p+"img/background_9.e6134b7.png"},function(e,t,n){e.exports=n.p+"img/background_2.b38c654.png"},function(e,t,n){e.exports=n.p+"img/UnboundRotationTool-Logo.b74dd39.png"},function(e,t,n){e.exports=n.p+"img/UnboundRotationToolShowoffv2.74f1181.gif"},,,function(e,t,n){e.exports=n.p+"img/virtual-ocarina.764afc6.png"},function(e,t,n){e.exports=n.p+"img/far-demo-day_icon.e67ad8b.png"},function(e,t,n){e.exports=n.p+"img/far-demo-day_magistrale.a185117.png"},function(e,t,n){e.exports=n.p+"img/far-demo-day_magistrale-1.9206da8.png"},function(e,t,n){e.exports=n.p+"img/far-demo-day_magistrale-2.f6e1402.png"},function(e,t,n){e.exports=n.p+"img/far-demo-day_magistrale-3.ccaef6a.png"},function(e,t,n){e.exports=n.p+"img/far-demo-day_magistrale-4.f712801.png"},function(e,t,n){e.exports=n.p+"img/kommunikation.10eaca7.jpg"},function(e,t,n){e.exports=n.p+"img/bildung.df920ef.jpg"},function(e,t,n){e.exports=n.p+"img/erlebnis.21d6bd9.jpg"},function(e,t,n){e.exports=n.p+"img/marble-maze_icon.d217867.png"},function(e,t,n){e.exports=n.p+"img/2.e2e4639.png"},function(e,t,n){e.exports=n.p+"img/fps_gameplay-12.df1949f.jpg"},function(e,t,n){e.exports=n.p+"img/fps_gameplay-01.c6a33e7.jpg"},function(e,t,n){e.exports=n.p+"img/fps_gameplay-02.64f7c06.jpg"},function(e,t,n){e.exports=n.p+"img/fps_gameplay-03.9222644.jpg"},function(e,t,n){e.exports=n.p+"img/fps_gameplay-05.ee80185.jpg"},function(e,t,n){e.exports=n.p+"img/fps_gameplay-07.7bb1ed6.jpg"},function(e,t,n){e.exports=n.p+"img/fps_gameplay-10.0688e36.jpg"},function(e,t,n){e.exports=n.p+"img/fps_gameplay-11.ea994bd.jpg"},function(e,t,n){e.exports=n.p+"img/bitschubser_gameplay-1.c1946cc.png"},function(e,t,n){e.exports=n.p+"img/bitschubser_gameplay-2.351bd88.png"},function(e,t,n){e.exports=n.p+"img/bitschubser_gameplay-3.aad91be.png"},function(e,t,n){e.exports=n.p+"img/bitschubser_gameplay-4.8b351f2.png"},function(e,t,n){e.exports=n.p+"img/sleepy-storm.fdeb2c9.png"},function(e,t,n){e.exports=n.p+"videos/zeit_reel.b6bacb5.webm"},function(e,t,n){e.exports=n.p+"videos/zeit_reel_fallback.8104368.mp4"},function(e,t,n){e.exports=n.p+"img/zeit_reel_poster.6bc04e9.jpg"},function(e,t,n){e.exports=n.p+"img/projects-2024.bc612fd.png"},function(e,t,n){e.exports=n.p+"img/projects-2025.7284421.png"},function(e,t,n){e.exports=n.p+"img/syn-chr-ony_all_for-web.83e67f3.jpg"},function(e,t,n){e.exports=n.p+"img/siblings_all.e9fe190.jpg"},function(e,t,n){e.exports=n.p+"img/young-enough-to-dream-all.55e1a96.jpg"},function(e,t,n){e.exports=n.p+"img/leila_for-web.3fa7aca.jpg"},function(e,t,n){e.exports=n.p+"img/pepper_for-web.4b0d8f4.jpg"},function(e,t,n){e.exports=n.p+"img/escape-into-solitude-i_for-web.5ff8c44.jpg"},function(e,t,n){e.exports=n.p+"img/escape-into-solitude-ii_for-web.6ab22b3.jpg"},function(e,t,n){e.exports=n.p+"img/escape-into-solitude-iii_for-web.edee0da.jpg"},function(e,t,n){e.exports=n.p+"img/escape-into-solitude-iv_for-web.08bafb4.jpg"},function(e,t,n){e.exports=n.p+"img/escape-into-solitude-all.56424f1.jpg"},function(e,t,n){e.exports=n.p+"img/whowherewhen-ii_for-web.2a7c69e.jpg"},function(e,t,n){e.exports=n.p+"img/whowherewhen-iii_for-web.52e6923.jpg"},function(e,t,n){e.exports=n.p+"img/whowherewhen-iv_for-web.1b9f250.jpg"},function(e,t,n){e.exports=n.p+"img/whowherewhen-v_for-web.0d6fa3c.jpg"},function(e,t,n){e.exports=n.p+"img/how-to-scale-a-pro-builder-object-in-unity_poster.a03d8d9.jpg"},function(e,t,n){e.exports=n.p+"img/wistum-poster-session2_thumbnail.1cc7e85.png"},function(e,t,n){e.exports=n.p+"img/wistum-poster-session1_thumbnail.f781e10.png"},function(e,t,n){e.exports=n.p+"videos/reel.b8ff214.mp4"},function(e,t,n){e.exports=n.p+"img/Location in Dimensions.c288886.png"},function(e,t,n){e.exports=n.p+"img/Algorithmus.e2bde13.png"}
1,function(e,t,n){e.exports=n.p+"img/memorial-punch-screenshot_1.da32d57.png"},function(e,t,n){e.exports=n.p+"img/memorial-punch-screenshot_2.9c75525.png"},function(e,t,n){e.exports=n.p+"img/memorial-punch-screenshot_3.fe1b57d.png"},function(e,t,n){e.exports=n.p+"img/memorial-punch-screenshot_4.d0e236a.png"},function(e,t,n){e.exports=n.p+"img/memorial-punch-screenshot_5.4769036.png"},function(e,t,n){e.exports=n.p+"img/memorial-punch-screenshot_6.bf022ee.png"},function(e,t,n){e.exports=n.p+"img/memorial-punch-screenshot_7.a654d82.png"},,,function(e,t,n){"use strict";var r=n(486),o=n.n(r);n.d(t,"default",(function(){return o.a}))},function(e,t,n){var r=n(3)(!1);r.push([e.i,'[data-v-85871396]:export{sm:640;md:768;lg:1024;xl:1280;xxl:1736;vLg:900;zIndexForeground:600;zIndexBase:0;zIndexBackground:-300;zIndexBackdrop:300;zIndexPage:1300;zindexSecondaryNavigation:3300;zIndexPrimaryNavigation:4300;zIndexCurtain:5300;zIndexFullScreenFeatures:6300;zIndexModals:7300;zIndexNotifications:8300;zIndexBlocker:9300}.citation--\\[Frida\\]_l4LO .reference--\\[Frida\\]_aiHs~.reference--\\[Frida\\]_aiHs[data-v-85871396]:before{content:"; "}',""]),r.locals={citation:"citation--[Frida]_l4LO",reference:"reference--[Frida]_aiHs"},e.exports=r},function(e,t,n){"use strict";var r=n(487),o=n.n(r);n.d(t,"default",(function(){return o.a}))},function(e,t,n){var r=n(3)(!1);r.push([e.i,"[data-v-87c360c8]:export{sm:640;md:768;lg:1024;xl:1280;xxl:1736;vLg:900;zIndexForeground:600;zIndexBase:0;zIndexBackground:-300;zIndexBackdrop:300;zIndexPage:1300;zindexSecondaryNavigation:3300;zIndexPrimaryNavigation:4300;zIndexCurtain:5300;zIndexFullScreenFeatures:6300;zIndexModals:7300;zIndexNotifications:8300;zIndexBlocker:9300}ul li[data-v-87c360c8]{text-indent:-2em;padding-left:2em}ul li[data-v-87c360c8]:before{content:none}",""]),e.exports=r},,,function(e,t,n){e.exports=n.p+"videos/waldsee-ii.8ec71b8.webm"},function(e,t,n){e.exports=n.p+"videos/waldsee-ii.3ff7706.mp4"},function(e,t,n){e.exports=n.p+"img/waldsee-ii_preview.4062ff4.jpg"},,,function(e,t,n){"use strict";var r=n(490),o=n.n(r);n.d(t,"default",(function(){return o.a}))},function(e,t,n){var r=n(3)(!1);r.push([e.i,'[data-v-5e288f46]:export{sm:640;md:768;lg:1024;xl:1280;xxl:1736;vLg:900;zIndexForeground:600;zIndexBase:0;zIndexBackground:-300;zIndexBackdrop:300;zIndexPage:1300;zindexSecondaryNavigation:3300;zIndexPrimaryNavigation:4300;zIndexCurtain:5300;zIndexFullScreenFeatures:6300;zIndexModals:7300;zIndexNotifications:8300;zIndexBlocker:9300}.container--\\[Frida\\]_o6ur[data-v-5e288f46]{width:100%;max-width:var(--max-width);display:grid;grid-gap:var(--grid-spacing-base);grid-template-columns:auto;grid-template-rows:auto auto;grid-template-areas:"header" "content";padding-bottom:var(--page-bottom-margin)}.container--\\[Frida\\]_o6ur.magicMaxWidth--\\[Frida\\]_XsqR[data-v-5e288f46]{max-width:900px}.headerContainer--\\[Frida\\]_\\+xBC[data-v-5e288f46]{grid-area:header;margin-bottom:var(--page-cover-magic-spacing)}.contentContainer--\\[Frida\\]_osAZ[data-v-5e288f46]{grid-area:content}',""]),r.locals={container:"container--[Frida]_o6ur",magicMaxWidth:"magicMaxWidth--[Frida]_XsqR",headerContainer:"headerContainer--[Frida]_+xBC",contentContainer:"contentContainer--[Frida]_osAZ"},e.exports=r},,,,,,,function(e,t,n){"use strict";n.r(t);var r=n(485),o={name:"CaptionTarget",props:{identifier:{type:String,default:function(){return Object(r.a)()}},showAlways:{type:Boolean,default:!1}},computed:{showWindow:function(){return this.$store.state.window.showWindow}}},l=n(2),component=Object(l.a)(o,(function(){var e=this,t=e.$createElement;return(e._self._c||t)("PortalTarget",{attrs:{name:"in-feed-caption-"+e.identifier}})}),[],!1,null,"55ebdb24",null);t.default=component.exports},,function(e,t,n){e.exports=n.p+"img/ohi-ohi-dungeon_icon.eaee9d9.png"},function(e,t,n){e.exports=n.p+"videos/ohi-ohi-dungeon_reel.c559c6c.webm"},function(e,t,n){e.exports=n.p+"videos/ohi-ohi-dungeon_reel_fallback.4558b9d.mp4"},function(e,t,n){e.exports=n.p+"img/ohi-ohi-dungeon_reel_poster.0e9e171.jpg"},function(e,t,n){e.exports=n.p+"img/first-person-controller-for-unity_icon.ded50b8.png"},function(e,t,n){e.exports=n.p+"img/virtual-ocarina_screenshot-01_with-mockup_no-background.292c31f.png"},function(e,t,n){e.exports=n.p+"img/virtual-ocarina_screenshot-01_with-mockup.6eb0e20.jpg"},function(e,t,n){e.exports=n.p+"img/mappers-peak.6ee2648.png"}
1,function(e,t,n){e.exports=n.p+"img/semestergamejam-2.9896d37.png"},function(e,t,n){e.exports=n.p+"img/marble-maze_screenshot-01_with-mockup_no-background.f64fb20.png"},function(e,t,n){e.exports=n.p+"img/marble-maze_screenshot-01_with-mockup.b00dc65.jpg"},function(e,t,n){e.exports=n.p+"img/rise-of-a-monster_icon.7b3ee9b.png"},function(e,t,n){e.exports=n.p+"videos/rise-of-a-monster_reel.634dc60.webm"},function(e,t,n){e.exports=n.p+"videos/rise-of-a-monster_reel_fallback.84b64c5.mp4"},function(e,t,n){e.exports=n.p+"img/rise-of-a-monster_reel_poster.3e845b8.jpg"},function(e,t,n){e.exports=n.p+"img/fps_icon.79d8026.png"},function(e,t,n){e.exports=n.p+"img/bitschubser_icon.a9eb0d3.png"},function(e,t,n){e.exports=n.p+"img/privacy-by-design_cover.7738356.png"},function(e,t,n){e.exports=n.p+"img/rdfStatementExample2Gerbracht2008_forWeb.4540661.png"},function(e,t,n){e.exports=n.p+"img/encryption-concept_forWeb.1f0b0ca.png"},function(e,t,n){e.exports=n.p+"img/rdfTransformationsGiereth2005_forWeb.b50c2e6.png"},function(e,t,n){e.exports=n.p+"img/privacy-by-design_icon.2df8312.png"},function(e,t,n){e.exports=n.p+"img/event-shape_icon.6013b8f.jpg"},function(e,t,n){e.exports=n.p+"videos/event-shape_reel.bc99f7d.webm"},function(e,t,n){e.exports=n.p+"videos/event-shape_reel_fallback.e399860.mp4"},function(e,t,n){e.exports=n.p+"img/event-shape_reel_poster.7f94a74.jpg"},function(e,t,n){e.exports=n.p+"videos/sleepy-storm_reel.aa45a94.webm"},function(e,t,n){e.exports=n.p+"videos/sleepy-storm_reel_fallback.8dae18f.mp4"},function(e,t,n){e.exports=n.p+"img/sleepy-storm_reel_poster.cccc9f7.jpg"},function(e,t,n){e.exports=n.p+"img/web-development_icon.5696d88.png"},function(e,t,n){e.exports=n.p+"img/background_6.789d92d.png"},function(e,t,n){e.exports=n.p+"img/boss-board_icon.b391ccb.png"},function(e,t,n){e.exports=n.p+"b72c106cac5001826c4f591c1599f80e.svg"},function(e,t,n){e.exports=n.p+"img/boss-design-engineering_icon.430d7a8.png"},function(e,t,n){e.exports=n.p+"img/virtual-world-design-engineering_icon.b183671.png"},function(e,t,n){e.exports=n.p+"img/game-design-engineering_icon.121f419.png"},function(e,t,n){e.exports=n.p+"img/game-research_icon.0bc7015.png"},function(e,t,n){e.exports=n.p+"img/game-teaching_icon.0acbb29.png"},function(e,t,n){e.exports=n.p+"img/background_1.fc6abc3.png"},function(e,t,n){e.exports=n.p+"img/game-projects_icon.a3ec242.png"},function(e,t,n){e.exports=n.p+"img/game-projects_background.69ac197.png"},function(e,t,n){e.exports=n.p+"img/diversity-equity-and-inclusion_icon.5aa6c03.png"},function(e,t,n){e.exports=n.p+"img/background_8.187f8e1.png"},function(e,t,n){e.exports=n.p+"img/flowers-i_icon.8632754.jpg"},function(e,t,n){e.exports=n.p+"videos/flowers-i_reel.7b2576b.webm"},function(e,t,n){e.exports=n.p+"videos/flowers-i_reel_fallback.a61e58d.mp4"},function(e,t,n){e.exports=n.p+"img/flowers-i_reel_poster.12b9620.jpg"},function(e,t,n){e.exports=n.p+"img/the-soft-one_for-web.03e9ec8.jpg"},function(e,t,n){e.exports=n.p+"img/the-soft-one_thumbnail_for-web.fcd06f3.jpg"},function(e,t,n){e.exports=n.p+"img/the-high-key_for-web.74a8d55.jpg"},function(e,t,n){e.exports=n.p+"img/the-high-key_thumbnail_for-web.e0b0bbc.jpg"},function(e,t,n){e.exports=n.p+"img/the-edgy-one_for-web.380ede1.jpg"},function(e,t,n){e.exports=n.p+"img/the-edgy-one_thumbnail_for-web.8394642.jpg"},function(e,t,n){e.exports=n.p+"img/the-shy-one_for-web.ca86bd3.jpg"},function(e,t,n){e.exports=n.p+"img/the-shy-one_thumbnail_for-web.33fd5d6.jpg"},function(e,t,n){e.exports=n.p+"img/zeit_icon.fca9ac6.jpg"},function(e,t,n){"use strict";var r=n(492),o=n.n(r);n.d(t,"default",(function(){return o.a}))},function(e,t,n){var r=n(3)(!1);r.push([e.i,"[data-v-3b781876]:export{sm:640;md:768;lg:1024;xl:1280;xxl:1736;vLg:900;zIndexForeground:600;zIndexBase:0;zIndexBackground:-300;zIndexBackdrop:300;zIndexPage:1300;zindexSecondaryNavigation:3300;zIndexPrimaryNavigation:4300;zIndexCurtain:5300;zIndexFullScreenFeatures:6300;zIndexModals:7300;zIndexNotifications:8300;zIndexBlocker:9300}.lautschrift--\\[Frida\\]_9UFM[data-v-3b781876]{font-size:15px}",""]),r.locals={lautschrift:"lautschrift--[Frida]_9UFM"},e.exports=r},function(e,t,n){e.exports=n.p+"img/hierarchy-tree-for-unity_icon.a264a7d.png"},function(e,t,n){e.exports=n.p+"videos/hierarchy-tree-for-unity_reel.026c2af.webm"},function(e,t,n){e.exports=n.p+"videos/hierarchy-tree-for-unity_reel_fallback.c03292c.mp4"},function(e,t,n){e.exports=n.p+"img/hierarchy-tree-for-unity_reel_poster.bed2873.jpg"},function(e,t,n){e.exports=n.p+"img/song-of-endrak-logo.011be36.png"},function(e,t,n){e.exports=n.p+"img/screenshot-1.cf513a5.png"},function(e,t,n){e.exports=n.p+"img/screenshot-1_thumb.288690d.png"},function(e,t,n){e.exports=n.p+"img/screenshot-2.743bd44.png"},function(e,t,n){e.exports=n.p+"img/screenshot-2_thumb.e713c9d.png"},function(e,t,n){e.exports=n.p+"img/screenshot-3.cd7c571.png"},function(e,t,n){e.exports=n.p+"img/screenshot-3_thumb.9541471.png"},function(e,t,n){e.exports=n.p+"img/screenshot-4.e39fb84.png"},function(e,t,n){e.exports=n.p+"img/screenshot-4_thumb.e7f6219.png"},function(e,t,n){e.exports=n.p+"img/screenshot-5.6a381e9.png"},function(e,t,n){e.exports=n.p+"img/screenshot-5_thumb.2ce68d8.png"},function(e,t,n){e.exports=n.p+"img/syn-chr-ony_icon.2bd7b89.jpg"},function(e,t,n){e.exports=n.p+"img/syn-chr-ony-i_for-web.56a63cf.jpg"},function(e,t,n){e.exports=n.p+"img/syn-chr-ony-i_thumbnail_for-web.a7a4a77.jpg"},function(e,t,n){e.exports=n.p+"img/syn-chr-ony-ii_for-web.baed6a9.jpg"},function(e,t,n){e.exports=n.p+"img/syn-chr-ony-ii_thumbnail_for-web.c583ef8.jpg"},function(e,t,n){e.exports=n.p+"img/syn-chr-ony-iii_for-web.251b2ae.jpg"},function(e,t,n){e.exports=n.p+"img/syn-chr-ony-iii_thumbnail_for-web.f05e719.jpg"},function(e,t,n){e.exports=n.p+"img/siblings_icon.53bd430.jpg"},function(e,t,n){e.exports=n.p+"img/siblings-i_for-web.79fc2f9.jpg"},function(e,t,n){e.exports=n.p+"img/siblings-i_thumbnail_for-web.e2b013f.jpg"},function(e,t,n){e.exports=n.p+"img/siblings-ii_for-web.0a724a2.jpg"},function(e,t,n){e.exports=n.p+"img/siblings-ii_thumbnail_for-web.0c845d3.jpg"},function(e,t,n){e.exports=n.p+"img/young-enough-to-dream_icon.fc8780a.jpg"},function(e,t,n){e.exports=n.p+"videos/young-enough-to-dream_reel.c5f74fe.webm"},function(e,t,n){e.exports=n.p+"videos/young-enough-to-dream_reel_fallback.f680187.mp4"},function(e,t,n){e.exports=n.p+"img/young-enough-to-dream_reel_poster.e0ade9d.jpg"},function(e,t,n){e.exports=n.p+"img/young-enough-to-dream-i_for-web.6dcbe0b.jpg"},function(e,t,n){e.exports=n.p+"img/young-enough-to-dream-i_thumbnail_for-web.b8a6815.jpg"},function(e,t,n){e.exports=n.p+"img/young-enough-to-dream-ii_for-web.76852f3.jpg"},function(e,t,n){e.exports=n.p+"img/young-enough-to-dream-ii_thumbnail_for-web.e0ade9d.jpg"},function(e,t,n){e.exports=n.p+"img/leila-and-pepper_icon.3ae473e.png"},function(e,t,n){e.exports=n.p+"img/escape-into-solitude_icon.2130587.png"},function(e,t,n){e.exports=n.p+"img/munich_icon.9d2097a.png"},function(e,t,n){e.exports=n.p+"img/munich_for-web.152e4c0.jpg"},function(e,t,n){e.exports=n.p+"img/munich_thumbnail_for-web.44d5f9f.jpg"},function(e,t,n){e.exports=n.p+"img/systems-of-nature_icon.55dd660.png"},function(e,t,n){e.exports=n.p+"img/systems-of-nature-i_for-web.7e64010.jpg"},function(e,t,n){e.exports=n.p+"img/systems-of-nature-i_thumbnail_for-web.4269d5c.jpg"},function(e,t,n){e.exports=n.p+"img/spider-and-bee_icon.9bc8b57.png"},function(e,t,n){e.exports=n.p+"img/bee_for-web.5c053a3.jpg"},function(e,t,n){e.exports=n.p+"img/bee_thumbnail_for-web.4314398.jpg"},function(e,t,n){e.exports=n.p+"img/spider_for-web.3fd18c0.jpg"},function(e,t,n){e.exports=n.p+"img/spider_thumbnail_for-web.019836e.jpg"}
1,function(e,t,n){e.exports=n.p+"img/origin_icon.67d3594.jpg"},function(e,t,n){e.exports=n.p+"img/origin_for-web.530ae6e.jpg"},function(e,t,n){e.exports=n.p+"img/origin_thumbnail_for-web.0782a9b.jpg"},function(e,t,n){e.exports=n.p+"img/structure_icon.cb23127.jpg"},function(e,t,n){e.exports=n.p+"img/structure-i_for-web.b654fb7.jpg"},function(e,t,n){e.exports=n.p+"img/structure-i_thumbnail_for-web.c0aed3b.jpg"},function(e,t,n){e.exports=n.p+"img/typewriting_icon.1cb3d61.jpg"},function(e,t,n){e.exports=n.p+"img/whowherewhen-i_for-web.29938f5.jpg"},function(e,t,n){e.exports=n.p+"img/whowherewhen-i_thumbnail_for-web.fcfe64b.jpg"},function(e,t,n){e.exports=n.p+"img/eye-to-eye_icon.ddb9a05.jpg"},function(e,t,n){e.exports=n.p+"img/eye-to-eye_for-web.4d03b9a.jpg"},function(e,t,n){e.exports=n.p+"img/eye-to-eye_thumbnail_for-web.706dfa6.jpg"},function(e,t,n){e.exports=n.p+"img/eye-to-eye-fly_for-web.3943641.jpg"},function(e,t,n){e.exports=n.p+"img/eye-to-eye-fly_thumbnail_for-web.a20f488.jpg"},function(e,t,n){e.exports=n.p+"img/eye-to-eye-all_for-web.df601e6.jpg"},function(e,t,n){e.exports=n.p+"img/eye-to-eye-all_thumbnail_for-web.62cf98e.jpg"},function(e,t,n){e.exports=n.p+"img/moon.35808ae.png"},function(e,t,n){e.exports=n.p+"videos/how-to-scale-a-pro-builder-object-in-unity.13c832c.webm"},function(e,t,n){e.exports=n.p+"videos/how-to-scale-a-pro-builder-object-in-unity_fallback.c5c016a.mp4"},function(e,t,n){"use strict";var r=n(493),o=n.n(r);n.d(t,"default",(function(){return o.a}))},function(e,t,n){var r=n(3)(!1);r.push([e.i,"[data-v-2cb0b75a]:export{sm:640;md:768;lg:1024;xl:1280;xxl:1736;vLg:900;zIndexForeground:600;zIndexBase:0;zIndexBackground:-300;zIndexBackdrop:300;zIndexPage:1300;zindexSecondaryNavigation:3300;zIndexPrimaryNavigation:4300;zIndexCurtain:5300;zIndexFullScreenFeatures:6300;zIndexModals:7300;zIndexNotifications:8300;zIndexBlocker:9300}.mediaContainer--\\[Frida\\]_Vf\\+l[data-v-2cb0b75a]{width:100%;aspect-ratio:1/1;overflow:hidden}",""]),r.locals={mediaContainer:"mediaContainer--[Frida]_Vf+l"},e.exports=r},function(e,t,n){e.exports=n.p+"img/student-projects_icon.efeb180.png"},function(e,t,n){e.exports=n.p+"img/play-x-discuss_poster_the-invisible-scientist.498a43c.png"},function(e,t,n){e.exports=n.p+"img/play-x-discuss_poster_swimming-with-the-sharks.b3d6cfa.png"},function(e,t,n){e.exports=n.p+"img/play-x-discuss_poster_the-mentor.5d28c88.png"},function(e,t,n){e.exports=n.p+"img/wistum-poster-session3_thumbnail.741fdcd.png"},function(e,t,n){e.exports=n.p+"img/gamespace-knowledge-graph_icon.16e16d8.png"},function(e,t,n){e.exports=n.p+"img/specifying-volumes-of-interest_icon.7e8abfd.png"},function(e,t,n){e.exports=n.p+"img/poster.b9805ff.png"},function(e,t,n){e.exports=n.p+"img/SpaceFoundationSystemPaper-Logo.bfd742b.png"},function(e,t,n){e.exports=n.p+"img/PaceMakerPaper-Logo.2b6db0e.png"},function(e,t,n){e.exports=n.p+"img/PaceMakerPaper-Logo_1024.ebb4c9b.png"},function(e,t,n){e.exports=n.p+"img/MemorialPunch-Logo.178a9ca.png"},function(e,t,n){e.exports=n.p+"img/MemorialPunch-Preview.e5e0cea.png"},function(e,t,n){e.exports=n.p+"img/FormalGamespacesAntiCheatingPaper-Logo.2ef5858.png"},function(e,t,n){e.exports=n.p+"img/FormalGamespacesAntiCheatingPaper-Logo_1024.193a094.png"},function(e,t,n){"use strict";var r=n(494),o=n.n(r);n.d(t,"default",(function(){return o.a}))},function(e,t,n){var r=n(3)(!1);r.push([e.i,"[data-v-d9a20a1e]:export{sm:640;md:768;lg:1024;xl:1280;xxl:1736;vLg:900;zIndexForeground:600;zIndexBase:0;zIndexBackground:-300;zIndexBackdrop:300;zIndexPage:1300;zindexSecondaryNavigation:3300;zIndexPrimaryNavigation:4300;zIndexCurtain:5300;zIndexFullScreenFeatures:6300;zIndexModals:7300;zIndexNotifications:8300;zIndexBlocker:9300}
1.container--\\[Frida\\]_YM1t[data-v-d9a20a1e]{display:flex;flex-direction:column;color:#fff}.title--\\[Frida\\]_U1J5[data-v-d9a20a1e]{text-align:justify;margin-bottom:.6em}.description--\\[Frida\\]_ZDmb[data-v-d9a20a1e]{text-align:justify;margin-bottom:0}.image--\\[Frida\\]_kzzz[data-v-d9a20a1e]{flex-grow:1;display:flex;justify-content:center;align-items:center}.image-position--\\[Frida\\]_Edic[data-v-d9a20a1e]{position:absolute;width:100%;height:50%}.image-area--\\[Frida\\]_voIM[data-v-d9a20a1e]{width:100%;height:100%;margin:auto}.categories--\\[Frida\\]_X2Mj[data-v-d9a20a1e]{align-self:flex-start}.categories--\\[Frida\\]_X2Mj[data-v-d9a20a1e],.type--\\[Frida\\]_8ee6[data-v-d9a20a1e]{margin-bottom:.5em}.type--\\[Frida\\]_8ee6[data-v-d9a20a1e]{align-self:flex-end}",""]),r.locals={container:"container--[Frida]_YM1t",title:"title--[Frida]_U1J5",description:"description--[Frida]_ZDmb",image:"image--[Frida]_kzzz","image-position":"image-position--[Frida]_Edic","image-area":"image-area--[Frida]_voIM",categories:"categories--[Frida]_X2Mj",type:"type--[Frida]_8ee6"},e.exports=r},function(e,t,n){"use strict";n.r(t),n.d(t,"metadata",(function(){return o}));var r=n(482),o={project:{identity:{title:"Ohi Ohi Dungeon",shortDescription:"A free click and collect mobile game.",externalProjectUrl:"https://github.com/dyrdadev/ohi-ohi-dungeon",subdirectory:"ohi-ohi-dungeon"},promotion:{icon:{source:n(602)},reel:{source:n(603),fallbackSource:n(604),poster:n(605),type:"video"}},preview:{detailed:{},priority:2},categories:{values:["games"]},types:{values:["game"]},history:{from:{version:"0.0.1",date:{year:2020,month:11,day:20}},to:{today:!0}}}},l={name:"Index",components:{MastodonLink:r.default},layout:"default",created:function(){this.metadata=o}},c=n(2),component=Object(c.a)(l,(function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("SimpleProjectLayout",{attrs:{metadata:e.metadata}},[n("PaperPage",{attrs:{"use-with-paper-patches":""}},[n("PaperPatch",[n("p",[e._v('\n "Ohi Ohi Dungeon" is a small click-&-collect game for mobile platforms developed in Unity. '),n("b",[e._v("The project is free and open source.")]),e._v(" You can find the source code and further details in the "),n("Hyperlink",{attrs:{to:"https://github.com/dyrdadev/ohi-ohi-dungeon"}},[e._v("project repository")]),e._v(" on GitHub.\n ")],1),e._v(" "),n("p",{staticClass:"comment"},[e._v("\n Enter dangerous dungeons with your little companion. Fight demons, orcs, and the undead. Defend your little hero from approaching enemies and loot the treasures of the dungeon. How long will you last? How many coins can you collect?\n ")]),e._v(" "),n("p",[n("b",[e._v("Play:")]),e._v(" In the game, you protect a little companion from approaching enemies by tapping on the screen to deal damage. Defeated enemies drop treasures, which you loot by swiping over them. The waves of enemies grow larger and larger, and more powerful, so make sure they don't overrun you. For particularly tough situations, you have some special attacks ready to use. But beware, once used, it will take some time until you have enough energy to use them again.\n ")]),e._v(" "),n("p",[n("b",[e._v("Development:")]),e._v(" The game is developed with Unity. It was created as an example project for the lectures Interaction Methods and Devices and 3D User Interfaces at the university. In the context of the game,\n students solve tasks related to touch and mouse input, event handling and reactive programming.\n ")]),e._v(" "),n("p",[n("b",[e._v("Support & Contribute:")]),e._v(" If you want to support me and my projects, you can follow me on "),n("GitHubLink"),e._v(". Just come by and say hello. I would love to hear how you are using this project. If you want to contribute to this project, you are welcome to do so. "),n("Hyperlink",{attrs:{to:"/contact"}},[e._v("Leave me a message")]),e._v(" and we will find a way to collaborate.\n ")],1)]),e._v(" "),n("WindowElement",{attrs:{"media-metadata":[e.metadata.project.promotion.reel],title:"Impressions","hide-divider-in-feed":""}})],1)],1)}),[],!1,null,null,null);t.default=component.exports;installComponents(component,{Hyperlink:n(63).default,GitHubLink:n(217).default,PaperPatch:n(357).default,WindowElement:n(356).default,PaperPage:n(354).default,SimpleProjectLayout:n(370).default})},function(e,t,n){"use strict";n.r(t),n.d(t,"metadata",(function(){return o}
1));var r=n(482),o={project:{identity:{title:"First-Person Controller for Unity",shortDescription:"A first-person controller.",externalProjectUrl:"https://github.com/dyrdadev/first-person-controller-for-unity",subdirectory:"first-person-controller-for-unity"},categories:{values:["technology","games"]},preview:{priority:2,detailed:{}},promotion:{icon:{source:n(606)},reel:{source:n(510),fallbackSource:n(511),poster:n(512),type:"video"}},types:{values:["asset"],description:"A First-Person Controller for Unity."},history:{from:{version:"0.0.1",date:{year:2020,month:6,day:3}},to:{today:!0}}}},l={name:"FirstPersonControllerForUnity",components:{MastodonLink:r.default},layout:"default",created:function(){this.metadata=o}},c=n(2),component=Object(c.a)(l,(function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("SimpleProjectLayout",{attrs:{metadata:e.metadata}},[n("PaperPage",{attrs:{"use-with-paper-patches":""}},[n("PaperPatch",[n("p",[e._v('\n "First-Person Controller" is an asset package for Unity. '),n("b",[e._v("The project is free and open source.")]),e._v(" You can find the source code and further details in the "),n("Hyperlink",{attrs:{to:e.metadata.project.identity.externalProjectUrl}},[e._v("project repository")]),e._v(" on GitHub. The footage shows the First-Person Controller in the context of the open source sample project "),n("Hyperlink",{attrs:{to:"/mappers-peak"}},[e._v('"Mapper\'s Peak"')]),e._v(".\n ")],1),e._v(" "),n("p",[n("b",[e._v("Features:")]),e._v(" The player controller combines a solid controller base with many on-demand features. These include different input modules (mouse & keyboard, gamepad, A.I., network, ...), locomotion modules (navmesh, physics,\n ...), and side effect modules (particles, sound, ...).\n ")]),e._v(" "),n("p",[n("b",[e._v("Use the Asset:")]),e._v(" You can find a quick start guide that explains how you can include this package in your project in the "),n("Hyperlink",{attrs:{to:e.metadata.project.identity.externalProjectUrl}},[e._v("project repository")]),e._v(".\n ")],1),e._v(" "),n("p",[n("b",[e._v("Development:")]),e._v(' The implementation relies on UniRx and Unity\'s "new" input system to provide a solution based on a clear and maintainable architecture that is easy to extend. The asset was created in 2020 as a project to teach principles of reactive programming in the lectures Interaction Methods and Devices and 3D User Interfaces.\n ')]),e._v(" "),n("p",[n("b",[e._v("Support & Contribute:")]),e._v(" If you want to support me and my projects, you can follow me on "),n("GitHubLink"),e._v(". Just come by and say hello. I would love to hear how you are using this project. If you want to contribute to this project, you are welcome to do so. "),n("Hyperlink",{attrs:{to:"/contact"}},[e._v("Leave me a message")]),e._v(" and we will find a way to collaborate.\n ")],1)]),e._v(" "),n("WindowElement",{attrs:{"media-metadata":[e.metadata.project.promotion.reel],title:"Impressions","hide-divider-in-feed":""}})],1)],1)}),[],!1,null,null,null);t.default=component.exports;installComponents(component,{Hyperlink:n(63).default,GitHubLink:n(217).default,PaperPatch:n(357).default,WindowElement:n(356).default,PaperPage:n(354).default,SimpleProjectLayout:n(370).default})},function(e,t,n){"use strict";n.r(t),n.d(t,"metadata",(function(){return r}));
1var r={project:{identity:{title:"Virtual Ocarina",shortDescription:"A virtual ocarina flute for mobile platforms.",externalProjectUrl:"https://github.com/dyrdadev/virtual-ocarina",subdirectory:"virtual-ocarina"},preview:{detailed:{pin:{source:n(522)}}},promotion:{icon:{source:n(522)},gallery:{items:[{source:n(607),alt:"",thumbnail:{source:n(608),alt:""},type:"image",title:'A screenshot of the "Virtual Ocarina"',year:2021,caption:""}]}},categories:{values:["games","technology"]},types:{values:["game","application"]},history:{in:{version:"0.0.1",date:{year:2021,month:1,day:21}},last:{version:"0.0.2",date:{year:2021,month:4,day:27}}}}},o={name:"FirstPersonControllerForUnity",layout:"default",created:function(){this.metadata=r}},l=n(2),component=Object(l.a)(o,(function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("SimpleProjectLayout",{attrs:{metadata:e.metadata}},[n("PaperPage",{attrs:{"use-with-paper-patches":""}},[n("PaperPatch",[n("p",[e._v('\n "Virtual Ocarina" is a free virtual instrument for mobile platformsâa digital version of a real ocarina.\n ')]),e._v(" "),n("p",[n("b",[e._v("Playing the Ocarina:")]),e._v(" You play the ocarina by blowing into the microphone of your smartphone while pressing the virtual keys on the screen. Different key combinations produce different tones. The combinations are based on a real four-hole ocarina. Check out the "),n("Hyperlink",{attrs:{to:"https://github.com/dyrdadev/virtual-ocarina"}},[e._v("project page")]),e._v(" on GitHub for builds and additional information on how to play an ocarina.\n ")],1),e._v(" "),n("p",[n("b",[e._v("It is free. This means it is made to be expanded:")]),e._v(" You can find the source code and further details in the "),n("Hyperlink",{attrs:{to:"https://github.com/dyrdadev/virtual-ocarina"}},[e._v("project repository")]),e._v(" on GitHub. The project is developed with Unity and originally created by me for use in lectures at the university to teach the principles of simple audio input and bitmasksâat some point in their life, everyone should have implemented a virtual ocarina .\n ")],1),e._v(" "),n("p",[e._v("\n So if you haven't implemented one yet, just join the project. I would love to extend the implementation with additional notes and different types of instruments. So, if you are into audio and you are motivated to work on a virtual instrument, just get in touch.\n ")])]),e._v(" "),n("WindowElement",{attrs:{"media-metadata":e.metadata.project.promotion.gallery.items,title:"Impression","hide-divider-in-feed":""}})],1)],1)}),[],!1,null,null,null);t.default=component.exports;installComponents(component,{Hyperlink:n(63).default,PaperPatch:n(357).default,WindowElement:n(356).default,PaperPage:n(354).default,SimpleProjectLayout:n(370).default})},function(e,t,n){"use strict";n.r(t),n.d(t,"metadata",(function(){return r}));var r={project:{identity:{title:"Milky Way Skybox for Unity",shortDe
1scription:"A free skybox of the Milky Way asset package for Unity.",externalProjectUrl:"https://github.com/dyrdadev/milky-way-skybox-for-unity",subdirectory:"milky-way-skybox-for-unity"},promotion:{icon:{source:n(497)},reel:{source:n(513),fallbackSource:n(514),poster:n(515),type:"video"}},preview:{},categories:{values:["games","technology"]},types:{values:["asset"]},history:{from:{version:"0.0.1",date:{year:2021,month:1,day:27}},to:{version:"0.0.3",date:{year:2021,month:4,day:27}},last:{version:"0.0.3",date:{year:2021,month:4,day:27}}}}},o={name:"MilkyWaySkyboxForUnity",layout:"default",created:function(){this.metadata=r}},l=n(2),component=Object(l.a)(o,(function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("SimpleProjectLayout",{attrs:{metadata:e.metadata}},[n("PaperPage",{attrs:{"use-with-paper-patches":""}},[n("PaperPatch",[n("p",[e._v('\n This package contains the amazing Milky Way panorama by "ESO/S. Brunier" as a skybox for Unity. Ready to be used in any project. Check out the '),n("Hyperlink",{attrs:{to:"https://github.com/dyrdadev/milky-way-skybox-for-unity"}},[e._v("project page")]),e._v(" on GitHub. "),n("b",[e._v("That's it: the Milky Way - as a free skybox for Unity. :)")])],1),e._v(" "),n("p",{staticClass:"comment"},[e._v('\n The credit for the "The Milky Way panorama" goes to the European Southern Observatory / Serge Brunier (ESO/S. Brunier). The images are licensed under a Creative Commons Attribution 4.0 International License.\n ')]),e._v(" "),n("p",{staticClass:"comment"},[e._v("\n The credit for the "),n("Hyperlink",{attrs:{to:"https://visibleearth.nasa.gov/collection/1484/blue-marble"}},[e._v('"Blue Marble"')]),e._v(" images goes to Visible Earth and the National Aeronautics and Space Administration (NASA).\n ")],1),e._v(" "),n("p",{staticClass:"comment"},[e._v("\n If the Milky Way isn't enough for you, and you also need the Earth and Moon, check out the package "),n("Hyperlink",{attrs:{to:"https://github.com/keijiro/MoonAndEarth"}},[e._v('"Moon and Earth"')]),e._v(" by "),n("Hyperlink",{attrs:{to:"https://github.com/keijiro"}},[e._v("Keijiro Takahashi")]),e._v(".\n ")],1)]),e._v(" "),n("WindowElement",{attrs:{"media-metadata":[e.metadata.project.promotion.reel],title:"Impressions","hide-divider-in-feed":""}})],1)],1)}),[],!1,null,null,null);t.default=component.exports;installComponents(component,{Hyperlink:n(63).default,PaperPatch:n(357).default,WindowElement:n(356).default,PaperPage:n(354).default,SimpleProjectLayout:n(370).default})},function(e,t,n){"use strict";n.r(t),n.d(t,"metadata",(function(){return r}));var r={project:{identity:{title:"Mapper's Peak",shortDescription:"A free experimental gamedev environment.",externalProjectUrl:"https://github.com/dyrdadev/mappers-peak",subdirectory:"mappers-peak"},preview:{detailed:{}},promotion:{icon:{source:n(609)},reel:{source:n(510),fallbackSource:n(511),poster:n(512),type:"video"}},categories:{values:["games","technology"]},types:{description:"A sci-fi themed experimental environment for game development.",values:["game"]},history:{description:"Published in 2020 and since then under development (when I find time.) ",from:{version:"0.0.1",date:{year:2020,month:6,day:3}},to:{today:!0}}}},o={name:"MappersPeak",layout:"default",created:function(){this.metadata=r}},l=n(2),component=Object(l.a)(o,(function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("SimpleProjectLayout",{attrs:{metadata:e.metadata}},[n("PaperPage",{attrs:{"use-with-paper-patches":""}},[n("PaperPatch",[n("p",[e._v("\n Mapper's Peak is a sci-fi Unity game project that was developed for use in university lectures and as a playground for open source projects. Mapper's Peak is not really a game but rather an experimental environment for game development.\n ")]),e._v(" "),n("p",[n("b",[e._v("Motivation:")]),e._v(" I wanted to create a project that I can use as a playground for other open source projects. I wanted this playground to be free, and to contain all the aspects that are normally found in games, including character controllers, 3D assets, shaders, particle effects, terrain and so on. This was quite the challenge, because for the project itself, this means using only free assets and code so that in the end the entire project can be completely free.\n ")]),e._v(" "),n("p",[e._v("\n I often use this project as a kind of game framework for different projects and assets I am working on. And I wanted to share it with you, so you can use it too.\n ")]),e._v(" "),n("p",[n("b",[e._v("Features:")]),e._v(" The project currently features one environment and all included assets. The environment was designed for an axis-aligned top-down camera as a demo environment to test and showcase features of a player controller and mechanics. It was initially developed for the course Introduction to Audio for Games to use it as context for some programming exercises. I still want to improve the project, there are still many features missing.\n ")]),e._v(" "),n("p",[n("b",[e._v("The project is free and open source:")]),e._v(" Feel free to use the project or individual assets in your own projects. You can find the source code and further details about the individual licenses in the "),n("Hyperlink",{attrs:{to:"https://github.com/dyrdadev/mappers-peak"}},[e._v("project repository")]),e._v(" on GitHub. If you are interested in updates, "),n("Hyperlink",{attrs:{to:"/contact"}},[e._v("get in touch")]),e._v(" and support the project.\n ")],1)]),e._v(" "),n("WindowElement",{attrs:{"media-metadata":[e.metadata.project.promotion.reel],title:"Impressions","hide-divider-in-feed":""}})],1)],1)}),[],!1,null,null,null);t.default=component.exports;installComponents(component,{Hyperlink:n(63).default,PaperPatch:n(357).default,WindowElement:n(356).default,PaperPage:n(354).default,SimpleProjectLayout:n(370).default})},function(e,t,n){"use strict";n.r(t),n.d(t,"metadata",(function(){return r}));
1var r={project:{identity:{title:"FAR DemoDay",shortDescription:"A yearly demo day organized by members of the TUM.",subdirectory:"far-demo-day",externalProjectUrl:"https://www.in.tum.de/far/lehre/demoday/"},preview:{detailed:{pin:{source:n(523)}}},promotion:{icon:{source:n(523)},gallery:{items:[{source:n(524),alt:"A screenshot of the virtual magistrale of the Demo Day.",thumbnail:{source:n(524),alt:""},type:"image",title:"Far Demo Day",year:2020,caption:""},{source:n(525),alt:"A screenshot of the virtual magistrale of the Demo Day.",thumbnail:{source:n(525),alt:""},type:"image",title:"Far Demo Day",year:2020,caption:""},{source:n(526),alt:"A screenshot of the virtual magistrale of the Demo Day.",thumbnail:{source:n(526),alt:""},type:"image",title:"Far Demo Day",year:2020,caption:""},{source:n(527),alt:"A screenshot of the virtual magistrale of the Demo Day.",thumbnail:{source:n(527),alt:""},type:"image",title:"Far Demo Day",year:2020,caption:""},{source:n(528),alt:"A screenshot of the virtual magistrale of the Demo Day.",thumbnail:{source:n(528),alt:""},type:"image",title:"Far Demo Day",year:2020,caption:""}]}},categories:{values:["games","science"]},types:{values:["event"],description:"The FAR Demo Day is an event series at the TUM."},history:{description:"The FAR Demo Day exists since 2011. It is held once per semester. In 2020 during the COVID pandemic, we reworked the event as an online event.",from:{date:{year:2020}},to:{today:!0}}}},o={name:"FarDemoday",layout:"default",created:function(){this.metadata=r}},l=n(2),component=Object(l.a)(o,(function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("SimpleProjectLayout",{attrs:{metadata:e.metadata}},[n("PaperPage",{attrs:{"use-with-paper-patches":""}},[n("PaperPatch",[n("p",[e._v("\n The FAR Demo Day is an event series at the TUM organized by students in collaboration with members of FAR. During the event, students of the TUM present their projects of the last semester in a virtual venue. The event is accompanied by a program including a one-minute madness with trailers of all projects, live streams and the Demo Day Awards. For the awards, visitors can vote on their favorite projects in various categories.\n ")]),e._v(" "),n("p",[e._v("\n Since the 2020 pandemic, the event has been held online. For this, we worked with many tools, including "),n("Hyperlink",{attrs:{to:"https://hubs.mozilla.com/"}},[e._v("Mozilla Hubs")]),e._v(" for the virtual venue, "),n("Hyperlink",{attrs:{to:"https://discord.com/"}},[e._v("Discord")]),e._v(" for communication, and "),n("Hyperlink",{attrs:{to:"https://youtube.com/"}},[e._v("YouTube")]),e._v(" and "),n("Hyperlink",{attrs:{to:"https://twitch.com/"}},[e._v("Twitch")]),e._v(" for live streams during the event.\n ")],1),e._v(" "),n("p",[e._v("\n If you are interested in visiting the next FAR Demo Day, check out the "),n("Hyperlink",{attrs:{to:"https://www.in.tum.de/far/lehre/demoday/"}},[e._v("official event page")]),e._v(".\n If you want to check out the projects of the last semesters, visit our "),n("Hyperlink",{attrs:{to:"https://wiki.tum.de/x/F4ISKQ"}},[e._v("wiki page")]),e._v(".\n ")],1)]),e._v(" "),n("WindowElement",{attrs:{"media-metadata":e.metadata.project.promotion.gallery.items,"hide-divider-in-feed":"",title:"Impressions"}})],1)],1)}),[],!1,null,null,null);t.default=component.exports;installComponents(component,{Hyperlink:n(63).default,PaperPatch:n(357).default,WindowElement:n(356).default,PaperPage:n(354).default,SimpleProjectLayout:n(370).default})},function(e,t,n){"use strict";n.r(t),n.d(t,"metadata",(function(){return r}));var r={project:{identity:{title:"Semester Game Jam",shortDescription:"A game jam organized by students of the TUM.",externalProjectUrl:"https://www.semestergamejam.de",subdirectory:"semester-game-jam"},preview:{detailed:{show:!0}},promotion:{icon:{source:n(610)},gallery:{items:[{source:n(529),alt:"",thumbnail:{source:n(529),alt:""},type:"image"},{source:n(530),alt:"",thumbnail:{source:n(530),alt:""},type:"image"},{source:n(531),alt:"",thumbnail:{source:n(531),alt:""},type:"image"}]}},categories:{values:["games"]},types:{values:["event"]},history:{description:"I was involved in the Semester Game Jam from 2015 to 2016. The project itself is being continued by others, so check it out.",from:{date:{year:2015}},to:{date:{year:2016}}}}},o={name:"SemesterGameJam",layout:"default",created:function(){this.metadata=r}},l=n(2),component=Object(l.a)(o,(function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("SimpleProjectLayout",{attrs:{metadata:e.metadata}},[n("PaperPage",{attrs:{"use-with-paper-patches":""}},[n("PaperPatch",[n("p",[e._v("\n The Semester Game Jam is a game jam event at the Technical University of Munich. The event takes place once every semester. In 42 hours, you plan, design, and develop a game on a given topic. The event is organized by students at TUMâan event made by students for students.\n ")]),e._v(" "),n("p",[n("b",[e._v("The Story Begins:")]),e._v(" In 2016, together with fellow students, we decided to take our small game jam at our faculty to the next level. The idea for the semester game jam was born.\n The underlying ideas behind the game jam are simple: networking, education, and fun.\n ")]),e._v(" "),n("p",[n("b",[e._v("The Game Jam Experience:")]),e._v(" Game jams always provide a great experience: the limited development time creates the event's appealing atmosphere. The teams can try out new, unconventional ideas and games. It's all about team spirit, creativity, and fun. Participants are challenged and encouraged in their teamwork and organizational skills, learn new technical tricks, and gain insights into other areas of game development. Designers, artists, programmers, writers, and musicians can connect, share their experiences, and build a basis for future projects and collaborations.\n ")]),e._v(" "),n("p",[n("b",[e._v("More than just Game Development:")]),e._v(" But the event is not only about development: besides an awesome environment for game development, the event is complemented with diverse side activities including achievements, talks of industry professionals, mentoring, and much more.\n ")]),e._v(" "),n("p",[e._v("\n As one of the founding members, I am especially proud that the Semester Game Jam is still going on and has been one of the biggest game jams in Germany for over six years now. On the\n "),n("Hyperlink",{attrs:{to:"https://www.semestergamejam.de"}},[e._v("Semester Game Jam website")]),e._v(", you will find more information about past and future events. But the best thing is to take part\n yourself: just sign up for the next Semester Game Jam!\n ")],1)]),e._v(" "),n("WindowElement",{attrs:{"media-metadata":e.metadata.project.promotion.gallery.items,title:"Impressions","hide-divider-in-feed":""}})],1)],1)}),[],!1,null,null,null);t.default=component.exports;installComponents(component,{Hyperlink:n(63).default,PaperPatch:n(357).default,WindowElement:n(356).default,PaperPage:n(354).default,SimpleProjectLayout:n(370).default})},function(e,t,n){"use strict";n.r(t),n.d(t,"metadata",(function(){return l}));var r=n(370),o=n(355),l={project:{identity:{title:"Guess the Distance",shortDe
1scription:"A location-based game for mobile platforms.",externalProjectUrl:"https://github.com/dyrdadev/guess-the-distance",subdirectory:"guess-the-distance"},preview:{detailed:{pin:{source:n(497)}}},promotion:{icon:{source:n(497)},reel:{source:n(513),fallbackSource:n(514),poster:n(515),type:"video"}},categories:{values:["games","technology"]},types:{description:'A free location-based "Guess the Distance" game for mobile platforms.',values:["game"]},history:{in:{date:{year:2021,month:1,day:29}}}}},c={name:"GuessTheDistance",components:{TextBlock:o.default,SimpleProjectLayout:r.default},layout:"default",created:function(){this.metadata=l}},d=n(2),component=Object(d.a)(c,(function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("SimpleProjectLayout",{attrs:{metadata:e.metadata}},[n("PaperPage",{attrs:{"use-with-paper-patches":""}},[n("PaperPatch",[n("p",[e._v('\n "Guess the Distance" is a small game for mobile platforms that supports location services. The project is developed with Unity and was created for use in lectures at the university to teach the principles of location-based services and spherical coordinate systems.\n ')]),e._v(" "),n("p",[n("b",[e._v("Guess the Distance:")]),e._v(' In the game, you have to guess the distance from your current location to a city on the globe. Enter your answer in the input field and click "Guess". You score if your answer is no more than 10% off. How many cities in the world do you know? More importantly, do you know where they are, and can you guess the distance correctly?\n ')]),e._v(" "),n("p",[n("b",[e._v("The project is free and open source:")]),e._v(" You can find the source code and further details in the "),n("Hyperlink",{attrs:{to:"https://github.com/dyrdadev/guess-the-distance"}},[e._v("project repository")]),e._v(" on GitHub. If you are interested in updates, "),n("Hyperlink",{attrs:{to:"/contact"}},[e._v("get in touch")]),e._v(" and support the project.\n ")],1),e._v(" "),n("p",{staticClass:"comment"},[e._v("\n The credit for "),n("Hyperlink",{attrs:{to:"https://www.eso.org/public/images/eso0932a/"}},[e._v('"The Milky Way panorama"')]),e._v(" goes to the European Southern Observatory / Serge Brunier (ESO/S. Brunier).\n\n The credit for the "),n("Hyperlink",{attrs:{to:"https://visibleearth.nasa.gov/collection/1484/blue-marble"}},[e._v('"Blue Marble"')]),e._v(" images goes to Visible Earth and the National Aeronautics and Space Administration (NASA).\n "),n("br"),e._v(" "),n("br"),e._v("\n You can use the "),n("Hyperlink",{attrs:{to:"/milky-way-skybox-for-unity"}},[e._v("Milky Way Skybox")]),e._v(" in your own Unity projects.\n ")],1)]),e._v(" "),n("WindowElement",{attrs:{"media-metadata":[e.metadata.project.promotion.reel],title:"Impressions","hide-divider-in-feed":""}})],1)],1)}),[],!1,null,null,null);t.default=component.exports;installComponents(component,{Hyperlink:n(63).default,PaperPatch:n(357).default,WindowElement:n(356).default,PaperPage:n(354).default,SimpleProjectLayout:n(370).default})},function(e,t,n){"use strict";n.r(t),n.d(t,"metadata",(function(){return r}));var r={project:{identity:{title:"Marble Maze",shortDescription:"A free marble maze game for mobile platforms.",externalProjectUrl:"https://github.com/dyrdadev/marble-maze",subdirectory:"marble-maze"},preview:{detailed:{pin:{source:n(532)}}},promotion:{icon:{source:n(532)},gallery:{items:[{source:n(611),alt:'A screenshot of the game "Marble Maze".',thumbnail:{source:n(612),alt:""},type:"image",title:'A mockup of the game "Marble Maze"',year:2021,caption:""}]}},categories:{values:["games","technology"]},types:{values:["game"]},history:{in:{version:"0.0.1",date:{year:2021,month:2,day:18}}}}},o={name:"MarbleMaze",layout:"default",created:function(){this.metadata=r}},l=n(2),component=Object(l.a)(o,(function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("SimpleProjectLayout",{attrs:{metadata:e.metadata}},[n("PaperPage",{attrs:{"use-with-paper-patches":""}},[n("PaperPatch",[n("p",[e._v('\n "Marble Maze" is a small game for mobile platforms that support accelerometer input. The project is developed with Unity. It was created for use in lectures at the university to teach the principles of accelerometers.\n ')]),e._v(" "),n("p",[n("b",[e._v("Play the Game:")]),e._v(" You play the game by orienting your smartphone horizontally so that your screen is facing upwards toward the sky. Tilt your smartphone to navigate the ball through the maze. The goal of the game is to reach the green target while avoiding the red areas.\n ")]),e._v(" "),n("p",[n("b",[e._v("The project is free and open source:")]),e._v(" You can find the source code and further details in the "),n("Hyperlink",{attrs:{to:"https://github.com/dyrdadev/marble-maze"}},[e._v("project repository")]),e._v(" on GitHub. If you are interested in updates, "),n("Hyperlink",{attrs:{to:"/contact"}},[e._v("get in touch")]),e._v(" and support the project.\n ")],1)]),e._v(" "),n("WindowElement",{attrs:{"media-metadata":e.metadata.project.promotion.gallery.items,title:"Impressions","hide-divider-in-feed":""}})],1)],1)}),[],!1,null,null,null);t.default=component.exports;installComponents(component,{Hyperlink:n(63).default,PaperPatch:n(357).default,WindowElement:n(356).default,PaperPage:n(354).default,SimpleProjectLayout:n(370).default})},function(e,t,n){"use strict";n.r(t),n.d(t,"metadata",(function(){return r}));
1var r={project:{identity:{title:"Rise of a Monster",shortDescription:"A jump'n'run game from 2016.",subdirectory:"rise-of-a-monster"},preview:{detailed:{}},promotion:{icon:{source:n(613)},reel:{source:n(614),fallbackSource:n(615),poster:n(616),type:"video"},gallery:{items:[{src:n(533),alt:'A screenshot of the game "Rise of a Monster".',thumbnail:{src:n(533),alt:""}}]}},categories:{values:["games"]},types:{values:["game"]},history:{in:{date:{year:2016}}}}},o={name:"RiseOfAMonster",layout:"default",created:function(){this.metadata=r}},l=n(2),component=Object(l.a)(o,(function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("SimpleProjectLayout",{attrs:{metadata:e.metadata}},[n("PaperPage",{attrs:{"use-with-paper-patches":""}},[n("PaperPatch",[n("p",[e._v('\n "Rise of a Monster" is a 2D jump\'n\'run game from 2016. It was developed for the "Storyworlds" course at the university.\n ')]),e._v(" "),n("p",[n("b",[e._v("A little Monster:")]),e._v(" This game tells the story of a little monster with a huge appetite. Living on a remote island, not suspecting anything, not expecting anything, our little friend just spends his days eating his way through one pile of fruit after another. But with the invasion of an army into this paradise world and a nuclear test, everything changes. Throughout the course of events, our little monster gets new powers to follow the call of his appetite. This is the story of a monster whose destiny will be to invade big cities, trample skyscrapers, shoot laser beams, and fight against giant monster apes.\n ")]),e._v(" "),n("p",[n("b",[e._v("Story and Style:")]),e._v(" Next to the storyworld we have created for this game, we wanted to focus on a specific look and feel for the game, giving the feeling of being inside of a comic. All the design choices were aimed towards this goal, including visual style, as well as features such as onomatopoeia for all gameplay actions. With the animated intro, we wanted to convey the feeling of an animated comic.\n ")]),e._v(" "),n("p",[e._v("\n The result of this project was a storyworld with a nice little jump'n'run game set in this world. I really enjoyed working on this game and I can recommend everyone to take a course on storyworlds once in their studies.\n ")])]),e._v(" "),n("WindowElement",{attrs:{"media-metadata":[e.metadata.project.promotion.reel],title:"Impressions","hide-divider-in-feed":""}})],1)],1)}),[],!1,null,null,null);t.default=component.exports;installComponents(component,{PaperPatch:n(357).default,WindowElement:n(356).default,PaperPage:n(354).default,SimpleProjectLayout:n(370).default})},function(e,t,n){"use strict";n.r(t),n.d(t,"metadata",(function(){return r}));var r={project:{identity:{title:"F.P.S.",shortDescription:"A VR game with full body gestures from 2015.",subdirectory:"fps"},preview:{detailed:{}},promotion:{icon:{source:n(617)},gallery:{items:[{source:n(534),alt:'A screenshot of the game "F.P.S.".',type:"image",thumbnail:{source:n(534),alt:""},title:'A screenshot of the game "F.P.S.".',year:2015,caption:""},{source:n(535),alt:'A screenshot of the game "F.P.S.".',type:"image",thumbnail:{source:n(535),alt:""},title:'A screenshot of the game "F.P.S.".',year:2015,caption:""},{source:n(536),alt:'A screenshot of the game "F.P.S.".',type:"image",thumbnail:{source:n(536),alt:""},title:'A screenshot of the game "F.P.S.".',year:2015,caption:""},{source:n(537),alt:'A screenshot of the game "F.P.S.".',type:"image",thumbnail:{source:n(537),alt:""},title:'A screenshot of the game "F.P.S.".',year:2015,caption:""},{source:n(538),alt:'A screenshot of the game "F.P.S.".',type:"image",thumbnail:{source:n(538),alt:""},title:'A screenshot of the game "F.P.S.".',year:2015,caption:""},{source:n(539),alt:'A screenshot of the game "F.P.S.".',type:"image",thumbnail:{source:n(539),alt:""},title:'A screenshot of the game "F.P.S.".',year:2015,caption:""},{source:n(540),alt:'A screenshot of the game "F.P.S.".',type:"image",thumbnail:{source:n(540),alt:""},title:'A screenshot of the game "F.P.S.".',year:2015,caption:""},{source:n(541),alt:'A screenshot of the game "F.P.S.".',type:"image",thumbnail:{source:n(541),alt:""},title:'A screenshot of the game "F.P.S.".',year:2015,caption:""}]}},categories:{values:["games"]},types:{values:["game"],description:'"F.P.S." is a sci-fi VR game with full-body gestures.'},history:{in:{date:{year:2015}}}}},o={name:"FPS",layout:"default",created:function(){this.metadata=r}},l=n(2),component=Object(l.a)(o,(function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("SimpleProjectLayout",{attrs:{metadata:e.metadata}},[n("PaperPage",{attrs:{"use-with-paper-patches":""}},[n("PaperPatch",[n("p",[e._v('\n "F.P.S." is a sci-fi VR game with full-body gestures from 2015. The game was developed in the context of courses at the university. Equipped with a head-mounted display and full body tracking, you enter a virtual world and take the role of a soldier who must explore an unknown island. While exploring the island on a floating platform, you fight attacking drones with unique skills of your battle suit, which you trigger by full-body gestures.\n ')]),e._v(" "),n("p",[n("b",[e._v("Technology:")]),e._v(" For this game, we tried to achieve maximal immersion and embodiment by implementing full body gesture input using multiple Kinect cameras in combination with a VR head-mounted display. The main technical challenge was to implement the sensor fusion for the multi-sensor setup comprising multiple Kinect camera systems. This system enabled us to design a game that can provide 360 degree full-body gesture input without additional devices that have to be worn by the user.\n ")]),e._v(" "),n("p",[n("b",[e._v("Gameplay:")]),e._v(" In the game, you step into the role of a futuristic soldier. The game itself consists of multiple levels. Starting in a virtual environment, an A.I. welcomes you, who introduces you to the story and your battle suit with all the gameplay mechanics. In the next level, you explore a futuristic island on a hovering platform while being under attack by hostile drones, completing your mission on the island.\n ")]),e._v(" "),n("p",[e._v("\n A core feature of the game is the combat system. We wanted to achieve a feeling of wearing a powerful battle suit that you can control with your body motion. With our tracking system, we can use your posture as input. You aim with your arms and activate abilities using specific hand gestures.\n ")])]),e._v(" "),n("WindowElement",{attrs:{"media-metadata":e.metadata.project.promotion.gallery.items,title:"Impressions","hide-divider-in-feed":""}})],1)],1)}),[],!1,null,null,null);t.default=component.exports;installComponents(component,{PaperPatch:n(357).default,WindowElement:n(356).default,PaperPage:n(354).default,SimpleProjectLayout:n(370).default})},function(e,t,n){"use strict";n.r(t),n.d(t,"metadata",(function(){return r}));
1var r={project:{identity:{title:"Bitschubser",shortDescription:"A serious game about programming from 2017.",subdirectory:"bitschubser"},promotion:{icon:{source:n(618)},gallery:{items:[{source:n(542),alt:'A screenshot of the game "Bitschubser".',type:"image",thumbnail:{source:n(542),alt:""},title:'A screenshot of the game "Bitschubser"',year:2017,caption:""},{source:n(543),alt:'A screenshot of the game "Bitschubser".',type:"image",thumbnail:{source:n(543),alt:""},title:'A screenshot of the game "Bitschubser"',year:2017,caption:""},{source:n(544),alt:'A screenshot of the game "Bitschubser".',type:"image",thumbnail:{source:n(544),alt:""},title:'A screenshot of the game "Bitschubser"',year:2017,caption:""},{source:n(545),alt:'A screenshot of the game "Bitschubser".',type:"image",thumbnail:{source:n(545),alt:""},title:'A screenshot of the game "Bitschubser"',year:2017,caption:""}]}},preview:{detailed:{},reel:{}},categories:{values:["games","technology"]},types:{values:["game"],description:"Bitschubser is a serious game about visual programming."},history:{description:"Bitschubser was developed and released in 2017.",in:{date:{year:2017}}}}},o={name:"Bitschubser",layout:"default",created:function(){this.metadata=r}},l=n(2),component=Object(l.a)(o,(function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("SimpleProjectLayout",{attrs:{metadata:e.metadata}},[n("PaperPage",{attrs:{"use-with-paper-patches":""}},[n("PaperPatch",[n("p",[e._v('\n Bitschubser is a "visual coding" game teaching you how to program in a playful way. It was developed at the Technical University of Munich (TUM) to celebrate 50 years of computer science in Munich.\n ')]),e._v(" "),n("p",[n("b",[e._v("A Serious Game about Programming:")]),e._v(" The University wanted a game for the celebration of 50 years of computer science in Munich. We decided to implement a serious game that introduces people to programming. So we designed the little robot Schubsi, our little companion who wants to solve programming tasks to earn stars. In the game, you help Schubsi to solve challenging tasks. In each level, you have different instructions at your disposal. Combine them into a program, which Schubsi then executes.\n ")]),e._v(" "),n("p",[n("b",[e._v("Help Schubsi:")]),e._v(" Each level is based on a room with two conveyor belts. Your task is to give Schubsi the right commands to transport the collection of boxes to the output conveyor in the correct order. In later levels, you will also have additional features such as buffer storage at your disposal. There are over 30 increasingly difficult levels that you can solve together with Schubsi. The tasks require simple logic as well as complex loops, caching, and calculations. From simple sorting to division and complex calculations, we included many programming challenges for you. Will you solve all the tasks correctly?\n ")]),e._v(" "),n("p",[e._v("\n Test your skills in over 25 different levels â Learn the basics of programming in a playful way â Compete with your friends in a high-score list.\n ")])]),e._v(" "),n("WindowElement",{attrs:{"media-metadata":e.metadata.project.promotion.gallery.items,title:"Figures","hide-divider-in-feed":""}})],1)],1)}),[],!1,null,null,null);t.default=component.exports;installComponents(component,{PaperPatch:n(357).default,WindowElement:n(356).default,PaperPage:n(354).default,SimpleProjectLayout:n(370).default})},function(e,t,n){"use strict";n.r(t),n.d(t,"metadata",(function(){return r}));var r={project:{pageIsProject:!0},page:{identity:{title:"Privacy in the Semantic Web: Encrypted RDF Graphs",shortDescription:"An article about RDF graphs.",subdirectory:"privacy-in-the-semantic-web-encrypted-rdf-graphs"},categories:{values:["science","technology"]},promotion:{icon:{source:n(623)}},preview:{detailed:{}},abstract:{value:"The need for privacy is ever-present in the Semantic Web and RDF graphs. Systems should strive for a state of optimal privacy to best serve society's interests: protecting indiviual's sensitive data while enabling general progress through knowledge gain. This article compares two methods to achieve privacy via encrypted RDF graphs: a full encryption method and a partial encryption method. The two approaches illustrate the tradeoff between maximum privacy and the possibility of processing the data."},history:{in:{date:{year:2018}}},content:{estimatedReadingTime:18}}},o={name:"PrivacyInTheSemanticWebEncryptedRdfGraphs",layout:"default",created:function(){this.metadata=r,this.references=[{key:"Bartel2013",citationAuthor:"Bartel et al.",citationYear:"2013",description:"Bartel, M.; Boyer, J.; Fox, B.; LaMacchia, B.; Simon, E. (2013). XML Signature Syntax and Processing Version 1.1. W3C Recommendation. Retrieved from https://www.w3.org/TR/xmldsig-core/ Accessed: 2018-04-25."},{key:"BernersLee2005",citationAuthor:"Berners-Lee et al.",citationYear:"2005",description:"Berners-Lee, T.; Fielding, R.; Masinter, L. (2005). Uniform Resource Identifier (URI): Generic Syntax. RFC 3986."},{key:"Carroll2003",citationAuthor:"Carroll",citationYear:"2003",description:"Carroll, J. (2003). Signing RDF Graphs. In (Fensel, Dieter; Sycara, Katia; Mylopoulos, John, eds): The Semantic Web - ISWC 2003. Springer Berlin Heidelberg, Berlin, Heidelberg, pp. 369â384."},{key:"Dolev1983",citationAuthor:"Dolev & Yao",citationYear:"1983",description:"Dolev, D.; Yao, A. (1983). On the security of public key protocols. IEEE Transactions on Information Theory, 29(2):198â208."},{key:"Foaf2014",citationAuthor:"FOAF",citationYear:"2014",description:"FOAF Vocabulary Specification 0.99. (2014). Retrieved from http://xmlns.com/foaf/spec/ Accessed: 2018-04-20."},{key:"Gerbracht2008",citationAuthor:"Gerbracht",citationYear:"2008",description:"Gerbracht, S. (2008). Possibilities to Encrypt an RDF-Graph. In: 2008 3rd International Conference on Information and Communication Technologies: From Theory to Applications. pp. 1â6."},{key:"Giereth2005",citationAuthor:"Giereth",citationYear:"2005",description:"Giereth, M. (2005). On Partial Encryption of RDF-Graphs. In: The SemanticWeb â ISWC 2005. Springer Berlin Heidelberg, Berlin, Heidelberg, pp. 308â322."},{key:"Imamura2013",citationAuthor:"Imamura et al.",citationYear:"2013",description:"Imamura, T.; Dillaway, B.; Simon, E.; Yiu, K.;
1 Nyström, M. (2013). XML Encryption Syntax and Processing Version 1.1. W3C Recommendation. Retrieved from https://www.w3.org/TR/xmlenc-core/ Accessed: 2018-04-25."},{key:"Kepner2014",citationAuthor:"Kepner et al.",citationYear:"2014",description:"Kepner, J.; Gadepally, V.; Michaleas, P.; Schear, N.; Varia, M.; Yerukhimovich, A.; Cunningham, R. K. (2014). Computing on masked data: a high performance method for improving big data veracity. In: 2014 IEEE High Performance Extreme Computing Conference (HPEC). pp. 1â6."},{key:"Des1999",citationAuthor:'"Data Encryption Standard"',citationYear:"1999",description:"National Institute of Standards and Technology (NIST). (1999). Data Encryption Standard (DES). Technical Report. Retrieved from https://csrc.nist.gov/csrc/media/publications/fips/46/3/archive/1999-10-25/documents/fips46-3.pdf Accessed: 2018-04-25."},{key:"Aes2001",citationAuthor:'"Advanced Encryption Standard"',citationYear:"2001",description:"National Institute of Standards and Technology (NIST). (2001). Advanced Encryption Standard (AES). Technical Report, November 2001. Retrieved from https://csrc.nist.gov/csrc/media/publications/fips/197/final/documents/fips-197.pdf Accessed: 2018-04-25."},{key:"Shs2015",citationAuthor:"Secure Hash Standard",citationYear:"2015",description:"National Institude of Standards and Technology (NIST). (2015). Secure Hash Standard (SHS). Technical Report, August 2015. Retrieved from https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.180-4.pdf Accessed: 2018-04-25."},{key:"Owl2012",citationAuthor:"OWL",citationYear:"2012",description:"W3C. (2012). OWL 2 Web Ontology Language Document Overview (Second Edition). Retrieved from https://www.w3.org/TR/owl2-overview/, 2012. Accessed: 2018-04-20."},{key:"RdfA2004",citationAuthor:'"RDF Primer"',citationYear:"2004",description:"W3C. (2004). RDF Primer. W3C Recommendation, February 2004. Retrieved from https://www.w3.org/TR/rdfprimer/Accessed: 2018-04-25."},{key:"RdfB2004",citationAuthor:'"RDF/XML Syntax Specification"',citationYear:"2004",description:"W3C. (2004). RDF/XML Syntax Specification. W3C Recommendation, February 2004. Retrieved from https://www.w3.org/TR/REC-rdf-syntax/ Accessed: 2018-04-20."},{key:"Rdf2014",citationAuthor:'"RDF Resource Description Framework"',citationYear:"2014",description:"W3C. (2014). RDF Resource Description Framework (RDF). Retrieved from https://www.w3.org/RDF/, February 2014. Accessed: 2018-04-20."},{key:"Rivest1992",citationAuthor:"Rivest",citationYear:"1992",description:"Rivest, R. (1992). The MD5 Message-Digest Algorithm. Technical Report, April 1992. Retrieved from http://www.faqs.org/rfcs/rfc1321.html Accessed: 2018-04-25."},{key:"Rivest1978",citationAuthor:"Rivest et al.",citationYear:"1978",description:"Rivest, R. L.; Shamir, A.; Adleman, L. (1978). A Method for Obtaining Digital Signatures and Public-key Cryptosystems. Commun. ACM, 21(2):120â126."}]}},l=n(2),component=Object(l.a)(o,(function(){var e=this,t=e.$createElement,r=e._self._c||t;return r("ArticleLayout",{attrs:{metadata:e.metadata}},[r("PaperPage",{staticClass:"numbered-headings",attrs:{"use-with-paper-patches":""}},[r("PaperPatch",[r("p",{staticClass:"comment"},[e._v('\n Note: This article was written for a seminar at university. It is a summary of mainly two papers: "On partial encryption of rdf-graphs" by Giereth (2005) and "Possibilities to encrypt an RDF-Graph" by Gerbracht (2008). If you are intereseted in more literature, check out the related work section of "HDTcrypt: Compression and encryption of RDF datasets" by JD Fernández et al. (2020) including the following papers: "HDTcrypt: Compression and encryption of RDF datasets" by JD Fernández et al. (2020), "Self-enforcing access control for encrypted RDF" by JD Fernández et al. (2017), "Towards search on encrypted graph data" by A. Kasten et al. (2013), and "Privacy-preserving reasoning for hypergraphical knowledge bases" by G. Voutsadakis (2008). (Thank you anonymous reviewer.)\n ')]),e._v(" "),r("WindowElement",{attrs:{"media-metadata":[{source:n(619),type:"image",credit:{label:"Daniel Dyrda",to:""},year:"2018",alt:"Visualization of a graphs.",caption:"Visualization of a graphs."}],"use-for-cover":!0,"hide-in-feed":"","show-space-instead":!1}}),e._v(" "),r("h2",{attrs:{id:"sec:intro"}},[e._v("Introduction")]),e._v(" "),r("p",[e._v("\n In the course of digitization, society has started to collect information about everything and everyone. We are now able to correlate and link the collected data to increase the information value and draw deeper conclusions. Such vast amounts of information and the resulting conclusions offer us many advantages and an immense knowledge potential: companies can recognize customer needs and provide the right products; widespread diseases can be detected at an early stage to save the lives of thousands of individuals;
1 traffic in a metropolis can be directed efficiently to reduce pollution and avoid bottlenecks in the infrastructure.\n ")]),e._v(" "),r("p",[e._v("\n However, many people regard information about themselves as very personal. Therefore, they want their personal data to be protected. The need for privacy in data processing is strong and we cannot ignore it. Privacy in this context means that sensitive data is only accessible to authorized entities.\n ")]),e._v(" "),r("p",[e._v("\n A fundamental challenge in the described development of data collection is to not miss the opportunities offered by the data without violating the privacy of the individual.\n ")]),e._v(" "),r("p",[e._v("\n Merging and re-using distributed data to gain knowledge is an important aspect of the Semantic Web "),r("Citation",{attrs:{references:e.references,citations:[{key:"Giereth2005"}]}}),e._v(". As part of the Semantic Web, the Resource Description Framework (RDF) and RDF graphs are important technologies often used in large NoSQL stores to correlate large amounts of data "),r("Citation",{attrs:{references:e.references,citations:[{key:"Giereth2005"},{key:"Gerbracht2008"}]}}),e._v(". In this context, a solution is desirable that protects relevant data and thus ensures privacy, while still allowing further processing of the data. One approach is to only partially encrypt the data so that some of the data can still be processed. These approaches address some of the aforementioned requirements, but also introduce new challenges.\n ")],1),e._v(" "),r("p",[e._v("\n In this article, we will take a closer look at RDF graphs and how we can use cryptographic methods to achieve privacy. We compare the approach of partially encrypted data with approaches where the data is fully encrypted. This comparison illustrates the tradeoff between maximum privacy and the ability to process data.\n ")]),e._v(" "),r("h2",{attrs:{id:"sec:relatedwork"}},[e._v("Related Work")]),e._v(" "),r("p",[e._v("\n Although the broad field of cryptography is a popular field of research, comparatively little has been done in the field of encryption of RDF graphs "),r("Citation",{attrs:{references:e.references,citations:[{key:"Gerbracht2008"}]}}),e._v(". Some of the most extensive works come from Giereth (compare for example "),r("Citation",{attrs:{references:e.references,citations:[{key:"Giereth2005"}]}}),e._v(") and Gerbracht (see for example "),r("Citation",{attrs:{references:e.references,citations:[{key:"Gerbracht2008"}]}}),e._v(") who provide solutions for partial encryption of RDF Graphs.\n ")],1),e._v(" "),r("h2",{attrs:{id:"sec:background"}},[e._v("RDF Graphs, Privacy & Cryptography")]),e._v(" "),r("p",[e._v("\n In this section we will explain the background for the remaining sections in greater detail. To that end, we will address a number of topics: we explain what RDF graphs are, we discuss privacy for information systems in general, and, last but not least, we explore what privacy means in the context of RDF graphs.\n ")])],1),e._v(" "),r("WindowElement",{attrs:{identifier:"figure-1","media-metadata":[{source:n(620),type:"image",title:"Figure 1",credit:{label:"Daniel Dyrda based on Gerbracht (2008)",to:""},year:"2018",alt:"An example of a simple RDF graph based on Gerbracht (2008).",caption:"An example of a simple RDF graph based on Gerbracht (2008)."}],"use-for-cover":!1,"show-caption-in-feed":""}}),e._v(" "),r("PaperPatch",[r("CaptionTarget",{attrs:{identifier:"figure-1"}}),e._v(" "),r("h3",{attrs:{id:"resource-description-framework-rdf"}},[e._v("Resource Description Framework (RDF)")]),e._v(" "),r("p",[e._v("\n The Resource Description Framework, or RDF, is an assertional language "),r("Citation",{attrs:{references:e.references,citations:[{key:"Giereth2005"}]}}),e._v(". According to the World Wide Web Consortium (W3C) RDF is a standard model for data interchange on the Web "),r("Citation",{attrs:{references:e.references,citations:[{key:"RdfA2004"}]}}),e._v(".\n ")],1),e._v(" "),r("p",[e._v("\n The language itself consists of assertions. Assertions link data together, showing that a particular piece of information about a resource is true "),r("Citation",{attrs:{references:e.references,citations:[{key:"Gerbracht2008"},{key:"Giereth2005"}]}}),e._v(". There are various ontologies and vocabularies, such as FOAF "),r("Citation",{attrs:{references:e.references,citations:[{key:"Foaf2014"}]}}),e._v(" or OWL "),r("Citation",{attrs:{references:e.references,citations:[{key:"Owl2012"}]}}),e._v(" to describe assertions. The basic structure, however, is usually the same: an assertion consists of a subject, a predicate, and an object. It is represented as triple "),r("span",{staticClass:"math inline"},[e._v("â<â"),r("em",[e._v("s")]),e._v(",â"),r("em",[e._v("p")]),e._v(",â"),r("em",[e._v("o")]),e._v(">")]),e._v(". The structure of an assertion triple can be expressed as: "),r("span",{staticClass:"math inline"},[e._v("{"),r("em",[e._v("U")]),e._v("â
âªâ
"),r("em",[e._v("B")]),e._v("}â
Ãâ
{"),r("em",[e._v("U")]),e._v("}â
Ãâ
{"),r("em",[e._v("U")]),e._v("â
âªâ
"),r("em",[e._v("B")]),e._v("â
âªâ
"),r("em",[e._v("L")]),e._v("}
1")]),e._v(", where "),r("span",{staticClass:"math inline"},[r("em",[e._v("U")])]),e._v(" denotes the set of valid Uniform Resource Identifiers (URI) "),r("Citation",{attrs:{references:e.references,citations:[{key:"BernersLee2005"}]}}),e._v(", "),r("span",{staticClass:"math inline"},[r("em",[e._v("B")])]),e._v(" is the set of blank nodes, and "),r("span",{staticClass:"math inline"},[r("em",[e._v("L")])]),e._v(" is the set of RDF literals. "),r("Citation",{attrs:{references:e.references,citations:[{key:"Gerbracht2008"},{key:"Giereth2005"},{key:"RdfB2004"}]}})],1),e._v(" "),r("p",[e._v("\n A number of assertions can be considered as a set of triples. Such a set of triples is commonly referred to as an RDF Graph "),r("Citation",{attrs:{references:e.references,citations:[{key:"Giereth2005"},{key:"RdfB2004"}]}}),e._v(". An RDF Graph or triple set can be interpreted as a Directed Labeled Graph (DLG): Subjects and objects form nodes, triples are edges and predicates are edge labels "),r("Citation",{attrs:{references:e.references,citations:[{key:"Giereth2005"},{key:"RdfA2004"}]}}),e._v(". The result is a representation that provides both structural information and label information "),r("Citation",{attrs:{references:e.references,citations:[{key:"Giereth2005"}]}}),e._v(". Figure 1 shows an example of a simple RDF Graph containing two assertions. Besides a visualization as DLG, an RDF Graph can be serialized. Different languages such as RDF/XML, N-Triples or Notation 3 (N3) can be used for serialization "),r("Citation",{attrs:{references:e.references,citations:[{key:"Giereth2005"},{key:"Gerbracht2008"},{key:"RdfB2004"}]}}),e._v(".\n ")],1),e._v(" "),r("h3",{attrs:{id:"cryptography"}},[e._v("Ways to gain Privacy: Cryptography")]),e._v(" "),r("p",[e._v("\n There are various ways to achieve privacy, and the possibilities of gaining privacy in information processing can be broken down into two methods (as discussed in "),r("Citation",{attrs:{references:e.references,citations:[{key:"Giereth2005"}]}}),e._v(".)\n ")],1),e._v(" "),r("ol",[r("li",[r("p",[e._v("\n We can control the access to the sensitive data and then secure the infrastructure used for storing and transferring the data "),r("Citation",{attrs:{references:e.references,citations:[{key:"Giereth2005"}]}}),e._v(".\n ")],1)]),e._v(" "),r("li",[r("p",[e._v("\n We can protect the sensitive data itself by using cryptographic methods "),r("Citation",{attrs:{references:e.references,citations:[{key:"Giereth2005"}]}}),e._v(".\n ")],1)])]),e._v(" "),r("p",[e._v("\n The first approach seems rather obvious, but is hardly feasible. Controlling the access to data and securing communication channels requires a trustworthy infrastructure. This is very difficult, almost impossible to achieve. We must always assume that there are hostile participants in a network at any time: According to the widely accepted Dolev-Yao attacker model, the attacker is the network "),r("Citation",{attrs:{references:e.references,citations:[{key:"Dolev1983"}]}}),e._v(". Therefore, in principle, the attacker has the possibility to change, readdress, duplicate, delete, or add new messages. Consequently, the first approach is not really an option to ensure privacy."),r("br"),e._v("\n The second approach with cryptographic methods is the more reliable solution. This is the case because, for this approach, reliability is not based on the security of the network, but on the strength of the cryptographic algorithms used. In contrast to the security of a network, we have more control over the strength of cryptographic algorithms.\n ")],1),e._v(" "),r("p",[e._v("\n In the following section, we provide a short overview regarding basic secure cryptographic methods including general encryption and decryption algorithms, symmetric and asymmetric encryption methods, and data integrity.\n ")]),e._v(" "),r("p",{attrs:{id:"encryption"}},[r("b",[e._v("Encryption")]),e._v(" An encryption process encrypts readable plaintext data using an encryption algorithm in combination with an encryption key. The resulting ciphertext should not reveal any information about the original data. Then it is only readable for authorized users who can restore the original information by decrypting the ciphertext. We can express an encryption process as "),r("span",{staticClass:"math inline"},[r("em",[e._v("e")]),e._v("("),r("em",[e._v("m")]),e._v(","),r("em",[e._v("k")]),r("sub",[r("em",[e._v("e")])]),e._v(")â=â"),r("em",[e._v("c")])]),e._v(", with "),r("span",{staticClass:"math inline"},[r("em",[e._v("e")])]),e._v(" as a function implementing the encryption algorithm, "),r("span",{staticClass:"math inline"},[r("em",[e._v("m")])]),e._v(" as the plaintext, "),r("span",{staticClass:"math inline"},[r("em",[e._v("k")]),r("sub",[r("em",[e._v("e")])])]),e._v(" as the encryption key, and "),r("span",{staticClass:"math inline"},[r("em",[e._v("c")])]),e._v(" the resulting ciphertext. "),r("Citation",{attrs:{references:e.references,citations:[{key:"Gerbracht2008"},{key:"Giereth2005"}]}})],1),e._v(" "),r("p",{attrs:{id:"decryption"}},[r("b",[e._v("Decryption")]),e._v(" A decryption process can be expressed as "),r("span",{staticClass:"math inline"},[r("em",[e._v("d")]),e._v("("),r("em",[e._v("c")]),e._v(","),r("em",[e._v("k")]),r("sub",[r("em",[e._v("d")])]),e._v(")â=â"),r("em",[e._v("m")])]),e._v(", with "),r("span",{staticClass:"math inline"},[r("em",[e._v("d")])]),e._v(" as a function implementing the decryption algorithm, "),r("span",{staticClass:"math inline"},[r("em",[e._v("c")])]),e._v(" as the ciphertext, "),r("span",{staticClass:"math inline"},[r("em",[e._v("k")]),r("sub",[r("em",[e._v("d")])])]),e._v(" as the decryption key, and "),r("span",{staticClass:"math inline"},[r("em",[e._v("m")])]),e._v(" the resulting plaintext "),r("Citation",{attrs:{references:e.references,citations:[{key:"Gerbracht2008"},{key:"Giereth2005"}]}}),e._v(". A decryption process is the inverse process to the encryption process "),r("span",{staticClass:"math inline"},[r("em",[e._v("e")])]),e._v(" so that "),r("span",{staticClass:"math inline"},[r("em",[e._v("d")]),e._v("("),r("em",[e._v("e")]),e._v("("),r("em",[e._v("m")]),e._v(","),r("em",[e._v("k")]),r("sub",[r("em",[e._v("e")])]),e._v("),"),r("em",[e._v("k")]),r("sub",[r("em",[e._v("d")])]),e._v(")â=â"),r("em",[e._v("m")])]),e._v(" applies "),r("Citation",{attrs:{references:e.references,citations:[{key:"Gerbracht2008"}]}}),e._v(".\n ")],1),e._v(" "),r("p",[r("b",[e._v("Symmetric and asymmetric approaches")]),e._v(" We can distinguish cryptographic methods between symmetric and asymmetric approaches. The cryptographic method is symmetric if "),r("span",{staticClass:"math inline"},[r("em",[e._v("k")]),r("sub",[r("em",[e._v("e")])]),e._v("â=â"),r("em",[e._v("k")]),r("sub",[r("em",[e._v("d")])])]),e._v(" applies; otherwise it is asymmetric. "),r("Citation",{attrs:{references:e.references,citations:[{key:"Gerbracht2008"},{key:"Giereth2005"}]}}),e._v(" Examples for symmetric algorithms include the Data Encryption Standard (DES) "),r("Citation",{attrs:{references:e.references,citations:[{key:"Des1999"}]}}),e._v(" and the Advanced Encryption Standard (AES) "),r("Citation",{attrs:{references:e.references,citations:[{key:"Aes2001"}]}}),e._v(". A typical application of a symmetric approach is the encryption of hard drives. Here, the same entity encrypts the data for protection with a key that later decrypts the data for access with the same key. Asymmetric approaches include for example the public-key cryptosystem by Rivest, Shamir and Adleman, also known as RSA "),r("Citation",{attrs:{references:e.references,citations:[{key:"Rivest1978"}]}}),e._v(". A typical application of asymmetric approaches is the encryption of emails. In this case, the sender of an email encrypts the data with a public key of the intended recipient and the receiver decrypts the data for access with a different private key.\n ")],1),e._v(" "),r("p",[r("b",[e._v("Data Integrity")]),e._v(" Secure cryptographic methods require a solution to ensure the integrity of the data; one way hash functions provide solutions for data integrity checks "),r("Citation",{attrs:{references:e.references,citations:[{key:"Giereth2005"}]}}),e._v(". We can use hash functions to generate a digest of a message. This digest can then be used to detect whether the message has been changed since the original digest was generated. "),r("Citation",{attrs:{references:e.references,citations:[{key:"Shs2015"}]}}),r("br"),e._v("\n Examples of hash functions for data integrity checks include the Secure Hash Algorithms (SHA) as described
1in the Secure Hash Standard (SHS) of the National Institute of Standards and Technology (NIST) "),r("Citation",{attrs:{references:e.references,citations:[{key:"Shs2015"}]}}),e._v(", and the MD5 Message-Digest Algorithm (MD5) "),r("Citation",{attrs:{references:e.references,citations:[{key:"Rivest1992"}]}}),e._v(".\n ")],1),e._v(" "),r("h3",{attrs:{id:"privacy-in-rdf-graphs"}},[e._v("Privacy in RDF Graphs")]),e._v(" "),r("p",[e._v("\n An RDF Graph provides two types of information: structure information and label information. Both types can be protected. Protecting structure information means to not reveal the topology. Protecting label information means to not reveal node and edge values. "),r("Citation",{attrs:{references:e.references,citations:[{key:"Giereth2005"}]}})],1),e._v(" "),r("p",[e._v("\n It is often the case that sensitive and non-sensitive data are mixed in one RDF graph. Therefore, it would be sufficient to protect only the sensitive data to provide the desired level of privacy, not the complete set of data. For RDF graphs, this means that it suffices to encrypt only parts of the graph. Regardless of which portion of the graph is to be protected â the entire graph or only parts of it â we can use common encryption methods as described in section "),r("Hyperlink",{attrs:{hash:"#encryption"}},[e._v("Encryption")]),e._v(". Depending on the application, symmetrical and asymmetrical methods are possible. The major challenge is the selection of relevant fragments.\n ")],1),e._v(" "),r("p",[e._v("\n As indicated earlier, data integrity checks are important when working with cryptographic techniques and should always be performed. RDF graphs present some challenges in this regard. The number of possible values in RDF graphs is typically not large because certain schemas are used, which usually specify only a certain number of possible values "),r("Citation",{attrs:{references:e.references,citations:[{key:"Giereth2005"},{key:"RdfB2004"}]}}),e._v(". This creates an opportunity for attackers to guess the original message by testing all possible values and comparing the hash values."),r("br"),e._v("\n The concept of one-way hash values can be extended by advanced methods such as randomized hash values. Randomized hash values can work around the aforementioned problem. The approach provides a higher degree of security because attackers can not guess the original message by exploiting the hash values. This method, however, introduces a compromise between security and data integration: we can still use the result for integrity checks but no longer for merging. "),r("Citation",{attrs:{references:e.references,citations:[{key:"Giereth2005"}]}})],1),e._v(" "),r("p",[e._v("\n There are multiple ways to gain privacy in RDF graphs using cryptographic methods. Following the aspect of different proportions of sensitive data, the approaches can be broken down into two categories of methods as illustrated in Figure 2: the full encryption of the entire RDF graph and the partial encryption of sensitive subgraphs of the RDF graph.\n ")])],1),e._v(" "),r("WindowElement",{attrs:{identifier:"figure-2","media-metadata":[{source:n(621),type:"image",title:"Figure 2",credit:{label:"Daniel Dyrda",to:""},year:"2018",alt:"Visualization of the concept of fully and partially encrypted RDF graphs.",caption:"Visualization of the concept of fully and partially encrypted RDF graphs."}],"use-for-cover":!1,"show-caption-in-feed":""}}),e._v(" "),r("PaperPatch",[r("CaptionTarget",{attrs:{identifier:"figure-2"}}),e._v(" "),r("h2",{attrs:{id:"fully-encrypted-rdf-graphs"}},[e._v("Fully Encrypted RDF Graphs")]),e._v(" "),r("p",[e._v("\n One approach to protecting the sensitive data of RDF graphs is to fully encrypt the entire graph. This is necessary if the entire graph represents sensitive information. In principle, this is also applicable if only a part of the data is sensitive, since it protects the entire graph with the procedure. This also means that the sensitive parts are protected.\n ")]),e._v(" "),r("h3",{attrs:{id:"full-encryption-process"}},[e._v("Full Encryption Process")]),e._v(" "),r("p",[e._v("\n The encryption process is very straightforward and does not really differ from the encryption of common messages or data structures. We interpret the complete graph as one coherent data block and we therefore ignore the inner structure of the graph itself or its semantic; we take the entire data block and encrypt it using common encryption methods. As a result, we get a ciphertext containing the encrypted RDF graph. If desired, digests can be calculated during the encryption process to enable integrity checks.\n ")]),e._v(" "),r("h3",{attrs:{id:"decryption-process-of-fully-encrypted-rdf-graphs"}},[e._v("Decryption Process of Fully Encrypted RDF Graphs")]),e._v(" "),r("p",[e._v("\n The decryption process is the inverse process of the encryption process. We simply access the entire cipher block and decrypt it as a whole. As a result, we get the original RDF graph. If data integrity methods were applied in the encryption process, we can check the integrity of the accessed ciphertext during the decryption process.\n ")]),e._v(" "),r("h3",{attrs:{id:"characteristics"}},[e._v("Characteristics")]),e._v(" "),r("p",[e._v("\n Most of the characteristics depend on the chosen cryptographic methods. Among other things, a fully encrypted RDF Graph as presented has the following characteristics.\n ")]),e._v(" "),r("p",[r("b",[e._v("Structural Information and Label Information")]),e._v(" Both types of information provided by an RDF Graph â the structure information and the label information â are completely hidden by the full encryption of the graph.\n ")]),e._v(" "),r("p",[r("b",[e._v("RDF Compliance")]),e._v(" Since the result is a common ciphertext, the result is not RDF compliant. In fact, it is not possible to infer the nature of the original data from the encrypted data. Without additional information, it is not apparent that the original data is an RDF graph.\n ")]),e._v(" "),r("p",[r("b",[e._v("Data Integrity")]),e._v(" Data integrity checks using hash functions can be applied.\n ")]),e._v(" "),r("p",[r("b",[e._v("Access")]),e._v(" Only authorized individuals who have access to the decryption key can access the information by decrypting the ciphertext. The level of protection depends entirely on the encryption methods used.\n ")]),e._v(" "),r("p",[r("b",[e._v("Working with the data")]),e._v(" In order to work with the RDF graph, the entire cipher block has to be accessed and decrypted by an authorized person â- even if only a single information is required and no matter how big the RDF graph and the corresponding ciphertext is.\n ")]),e._v(" "),r("h2",{attrs:{id:"partially-encrypted-rdf-graphs"}},[e._v("Partially Encrypted RDF Graphs")]),e._v(" "),r("p",[e._v("\n Another approach to protect sensitive data of RDF graphs is to encrypt only sensitive elements and subgraphs, while leaving non-sensitive data unencrypted and readable in the graph "),r("Citation",{attrs:{references:e.references,citations:[{key:"Gerbracht2008"},{key:"Giereth2005"}]}}),e._v(". This results in a partially encrypted RDF graph. There are several ways to approach partial encryption of RDF graphs. A commonly applied practice is to remove the sensitive elements from the original graph, encrypt the removed data, and store it in a new file. Afterwards, the file is linked to the original graph "),r("Citation",{attrs:{references:e.references,citations:[{key:"Giereth2005"}]}}),e._v(". According to Giereth "),r("Citation",{attrs:{references:e.references,citations:[{key:"Giereth2005"}]}}),e._v(", these methods have some disadvantages: The original RDF Graph is separated into different files, the result with multiple files is not RDF-compliant, the linkage has to be done manually, and there are no on ow to reintegrate the data into the RDF graph."),r("br"),e._v("\n Besides this approach, there are other solutions for encoding elements and RDF subgraphs that are more optimal. The
1se approaches include solutions based on XML-Encryption "),r("Citation",{attrs:{references:e.references,citations:[{key:"Imamura2013"}]}}),e._v(" and XML-Signature "),r("Citation",{attrs:{references:e.references,citations:[{key:"Bartel2013"}]}}),e._v(". For this article, we propose the method presented by Giereth "),r("Citation",{attrs:{references:e.references,citations:[{key:"Giereth2005"}]}}),e._v(". This approach uses Encryption Containers and replaces the sensitive data with blank nodes that in turn link to the corresponding Encryption Container "),r("Citation",{attrs:{references:e.references,citations:[{key:"Gerbracht2008"},{key:"Giereth2005"}]}}),e._v(".\n ")],1),e._v(" "),r("p",[r("b",[e._v("Encryption Container (EC)")]),e._v(" The Encryption Container (EC) is an XML encryption compliant representation that contains the ciphertext of sensitive data elements and all necessary metadata. Encryption metadata contains all relevant information such as the cryptographic keys, ciphers and the chosen encryption algorithm "),r("Citation",{attrs:{references:e.references,citations:[{key:"Giereth2005"}]}}),e._v(". XML literals can be inserted as objects in valid RDF graphs. So you can simply integrate the EC as an XML literal into the original graph. The result is still a well formed RDF Graph "),r("Citation",{attrs:{references:e.references,citations:[{key:"Gerbracht2008"},{key:"RdfB2004"}]}}),e._v(". We will see more about the exact use of ECs later in the Encryption Process section.\n ")],1),e._v(" "),r("p",[r("b",[e._v("Blank Nodes")]),e._v(" Blank nodes can occur in valid RDF graphs. A triple can have a blank node as subject, object or both "),r("Citation",{attrs:{references:e.references,citations:[{key:"RdfB2004"}]}}),e._v(". It is not possible to encrypt RDF graphs partially that contain blank nodes, since the rematching of the nodes to their original statements in the decryption process would fail. As one possible solution, we can replace all blank nodes with blank node identifiers "),r("Citation",{attrs:{references:e.references,citations:[{key:"Gerbracht2008"},{key:"RdfB2004"}]}}),e._v(". This can be achieved by applying Carrollâs One-Step Deterministic Labeling Algorithm presented in "),r("Citation",{attrs:{references:e.references,citations:[{key:"Carroll2003"}]}}),e._v(".\n ")],1),e._v(" "),r("h3",{attrs:{id:"graphtransformations"}},[e._v("Graph Transformations")]),e._v(" "),r("p",[e._v("\n The encrypted data is integrated into the graph as literal value. This means the original node is replaced by its EC serialization. In RDF, only objects can be literal values "),r("Citation",{attrs:{references:e.references,citations:[{key:"RdfB2004"}]}}),e._v(". If we want to encrypt a subject or predicate, a graph transformation is required in order to get a well formed RDF Graph as result "),r("Citation",{attrs:{references:e.references,citations:[{key:"Gerbracht2008"},{key:"Giereth2005"}]}}),e._v(". Figure 3 shows examples for all relevant transformations. We can distinguish three general cases:\n ")],1),e._v(" "),r("p",[r("b",[e._v("Subject Transformation")]),e._v(" This transformation is required when we want to encrypt a subject. For each subject "),r("span",{staticClass:"math inline"},[r("em",[e._v("S")])]),e._v(", we add a new triple "),r("span",{staticClass:"math inline"},[e._v("â<â"),r("em",[e._v("B")]),e._v(",â"),r("em",[e._v("renc:encNLabel")]),e._v(",â"),r("em",[e._v("E")]),r("em",[e._v("C")]),r("sub",[r("em",[e._v("S")])]),e._v(">")]),e._v(" to the graph, "),r("span",{staticClass:"math inline"},[r("em",[e._v("B")])]),e._v(" as newly created subject and "),r("span",{staticClass:"math inline"},[r("em",[e._v("E")]),r("em",[e._v("C")]),r("sub",[r("em",[e._v("S")])])]),e._v(" as the XML serialized EC of "),r("span",{staticClass:"math inline"},[r("em",[e._v("S")])]),e._v(". Afterwards we replace all references to "),r("span",{staticClass:"math inline"},[r("em",[e._v("S")])]),e._v(" with references to "),r("span",{staticClass:"math inline"},[r("em",[e._v("B")])]),e._v(". This means that the encryption of "),r("span",{staticClass:"math inline"},[r("em",[e._v("S")])]),e._v(" requires one change for each triple containing "),r("span",{staticClass:"math inline"},[r("em",[e._v("S")])]),e._v(" as subject or object. "),r("Citation",{attrs:{references:e.references,citations:[{key:"Gerbracht2008"},{key:"Giereth2005"}]}})],1),e._v(" "),r("p",[r("b",[e._v("Object Transformation")]),e._v(" Theoretically, it is possible to replace objects directly by their encryption container serialization. This would change the data type of the node to "),r("em",[e._v("rdf:XMLLiteral")]),e._v(". However, it makes sense to apply a graph transformation in order to get a uniform presentation format. This process is similar to the subject transformation. For each object "),r("span",{staticClass:"math inline"},[r("em",[e._v("O")])]),e._v(", we add a new triple "),r("span",{staticClass:"math inline"},[e._v("â<â"),r("em",[e._v("B")]),e._v(",â"),r("em",[e._v("renc:e
1ncNLabel")]),e._v(",â"),r("em",[e._v("E")]),r("em",[e._v("C")]),r("sub",[r("em",[e._v("O")])]),e._v(">")]),e._v(" to the graph, with "),r("span",{staticClass:"math inline"},[r("em",[e._v("B")])]),e._v(" as newly created subject and "),r("span",{staticClass:"math inline"},[r("em",[e._v("E")]),r("em",[e._v("C")]),r("sub",[r("em",[e._v("O")])])]),e._v(" as the XML serialized EC of "),r("span",{staticClass:"math inline"},[r("em",[e._v("O")])]),e._v(". Afterwards we replace all references to "),r("span",{staticClass:"math inline"},[r("em",[e._v("O")])]),e._v(" with references to "),r("span",{staticClass:"math inline"},[r("em",[e._v("B")])]),e._v(". "),r("Citation",{attrs:{references:e.references,citations:[{key:"Gerbracht2008"},{key:"Giereth2005"}]}})],1),e._v(" "),r("p",[r("b",[e._v("Predicate Transformation")]),e._v(" In RDF, only URI references are allowed as predicates. Thus, we can not just replace the predicate with a new blank node: a transformation is required. To solve this, we can apply the concept of RDF reification "),r("Citation",{attrs:{references:e.references,citations:[{key:"RdfA2004"}]}}),e._v(" while transforming the graph. "),r("Citation",{attrs:{references:e.references,citations:[{key:"Gerbracht2008"},{key:"Giereth2005"},{key:"RdfB2004"}]}}),e._v(" The transformation of predicates includes three steps: 1. we replace the original predicate "),r("span",{staticClass:"math inline"},[r("em",[e._v("P")])]),e._v(" with the URI reference "),r("span",{staticClass:"math inline"},[r("em",[e._v("renc:encPredicate")])]),e._v(", 2. we add a new reification quad to identify it, and 3. we add a new property "),r("span",{staticClass:"math inline"},[r("em",[e._v("renc:encPLabel")]),e._v("â=â"),r("em",[e._v("E")]),r("em",[e._v("C")]),r("sub",[r("em",[e._v("P")])])]),e._v(" to the reification quad. This property indicates that the real predicate is encrypted in "),r("span",{staticClass:"math inline"},[r("em",[e._v("E")]),r("em",[e._v("C")]),r("sub",[r("em",[e._v("P")])])]),e._v("."),r("br")],1)],1),e._v(" "),r("WindowElement",{attrs:{identifier:"figure-3","media-metadata":[{source:n(622),type:"image",title:"Figure 3",credit:{label:"Daniel Dyrda based on Giereth (2005)",to:""},year:"2018",alt:"Transformations of the encryption of subjects, objects, and predicates based on Giereth (2005).",caption:"Transformations of the encryption of subjects, objects, and predicates based on Giereth (2005)."}],"use-for-cover":!1,"show-caption-in-feed":""}}),e._v(" "),r("PaperPatch",[r("CaptionTarget",{attrs:{identifier:"figure-3"}}),e._v(" "),r("h3",{attrs:{id:"partial-encryption-process"}},[e._v("Partial Encryption Process")]),e._v(" "),r("p",[e._v("\n The partial encryption process itself comprises three steps: segment selection, segment encryption, and encryption graph transformations.\n ")]),e._v(" "),r("p",[r("b",[e._v("Segment Selection")]),e._v(" We select all fragments that are relevant for the encryption. Usually all sensitive data are candidates for encryption. Fragments can be subjects, objects, predicates or triples "),r("Citation",{attrs:{references:e.references,citations:[{key:"Giereth2005"}]}}),e._v(". In this process we separate the graph into two sets: encryption fragments that are selected for the encryption and plaintext fragments that remain in the original graph "),r("Citation",{attrs:{references:e.references,citations:[{key:"Giereth2005"}]}}),e._v(". The selection task itself can be done with different methods. We can explicitly list the encryption fragments. This approach is called static selection. Furthermore, we can use dynamic selection for which we define a selection pattern that automatically selects all relevant fragments (see Encryption Policies "),r("Citation",{attrs:{references:e.references,citations:[{key:"Giereth2005"}]}}),e._v("). A random selection where we randomly select fragments is also conceivable. "),r("Citation",{attrs:{references:e.references,citations:[{key:"Gerbracht2008"},{key:"Giereth2005"}]}})],1),e._v(" "),r("p",[r("b",[e._v("Segment Encryption")]),e._v(" This step in the encryption process is very straightforward. We serialize the fragments selected in the previous step and encrypt them using common encryption methods as presented in section "),r("Hyperlink",{attrs:{hash:"#encryption"}},[e._v("Encryption")]),e._v(" "),r("Citation",{attrs:{references:e.references,citations:[{key:"Gerbracht2008"},{key:"Giereth2005"}]}}),e._v(". The result of this step is an EC containing encrypted data and encryption metadata.\n ")],1),e._v(" "),r("p",[r("b",[e._v("Encryption Graph Transformation")]),e._v(" In this step we replace all selected fragments with their corresponding EC. As described earlier, XML literals are only allowed as objects. Graph Transformations are required to get a well-formed graph. We already described the schema for graph transformations in Section "),r("Hyperlink",{attrs:{hash:"#graphtransformations"}},[e._v("Graph Transformations")]),e._v("."),r("br"),e._v("\n After performing all graph transformations, we get a single self
1-describing RDF-compliant graph containing encrypted data, encryption metadata and plaintext fragments "),r("Citation",{attrs:{references:e.references,citations:[{key:"Gerbracht2008"},{key:"Giereth2005"}]}}),e._v(".\n ")],1),e._v(" "),r("h3",{attrs:{id:"decryption-process-of-partially-encrypted-rdf-graphs"}},[e._v("Decryption Process of Partially Encrypted RDF Graphs")]),e._v(" "),r("p",[e._v("\n The decryption process includes three steps: encryption container identification, segment decryption, and decryption graph transformations.\n ")]),e._v(" "),r("p",[r("b",[e._v("Encryption Container Identification")]),e._v(" We identify and extract all ECs with the encryption metadata. An RDF query language can be used for this purpose. "),r("Citation",{attrs:{references:e.references,citations:[{key:"Giereth2005"},{key:"Gerbracht2008"}]}})],1),e._v(" "),r("p",[r("b",[e._v("Segment Decryption")]),e._v(" We decrypt the extracted ECs according to the specifications in the encryption metadata. This step is only possible with the correct decryption key. The decryption process can fail with an incorrect key.\n ")]),e._v(" "),r("p",[r("b",[e._v("Decryption Graph Transformation")]),e._v(" We reconstruct the original RDF Graph by replacing the ECs with the corresponding plaintext values. Afterwards we can perform the inverse graph transformations of the transformation step in the encryption process. If all ECs are decrypted successfully, the new graph is identical to the original graph before encryption. If some ECs failed to decrypt, those encrypted data remain in the new graph. "),r("Citation",{attrs:{references:e.references,citations:[{key:"Gerbracht2008"},{key:"Giereth2005"}]}})],1),e._v(" "),r("h3",{attrs:{id:"characteristics-1"}},[e._v("Characteristics")]),e._v(" "),r("p",[e._v("\n A partially encrypted RDF Graph as presented has the following characteristics, among others. Additional characteristics depend on the chosen cryptographic methods.\n ")]),e._v(" "),r("p",[r("b",[e._v("Label Information")]),e._v(" The label information of the selected segments is hidden due to the encryption of the label content.\n ")]),e._v(" "),r("p",[r("b",[e._v("Structural Information")]),e._v(" Hiding structural information is possible but requires some effort. The presented encryption solution is a dependency preventing encryption and thus leaks information about the encrypted data "),r("Citation",{attrs:{references:e.references,citations:[{key:"Giereth2005"}]}}),e._v(". It allows guessing of the plaintext data. There are some solutions for this problem, such as a Dependency Destroying Encryption presented by Gerbracht in "),r("Citation",{attrs:{references:e.references,citations:[{key:"Gerbracht2008"}]}}),e._v(". These approaches take multiple encryption steps depending on the number of statements the elements are part of. These approaches produce much overhead, but increase the privacy protection capabilities "),r("Citation",{attrs:{references:e.references,citations:[{key:"Gerbracht2008"}]}}),e._v(".\n ")],1),e._v(" "),r("p",[r("b",[e._v("RDF Compliance")]),e._v(" The result of the encryption process is RDF compliant "),r("Citation",{attrs:{references:e.references,citations:[{key:"Gerbracht2008"},{key:"Giereth2005"}]}}),e._v(".\n ")],1),e._v(" "),r("p",[r("b",[e._v("Encryption Overhead")]),e._v(" The resulting graph after encryption is larger than the original graph because additional statements are inserted during the encryption process "),r("Citation",{attrs:{references:e.references,citations:[{key:"Gerbracht2008"},{key:"Giereth2005"}]}}),e._v(". Gerbracht "),r("Citation",{attrs:{references:e.references,citations:[{key:"Gerbracht2008"}]}}),e._v(" presents a method that uses URIs to optimize the presented method. With the adapted method, only one new statement is created per selected element. The encryption overhead is reduced to a minimum.\n ")],1),e._v(" "),r("p",[r("b",[e._v("Information Leakage due to Ontologies")]),e._v(" Semantic Web applications often use ontologies. This is also the case for RDF graphs "),r("Citation",{attrs:{references:e.references,citations:[{key:"Gerbracht2008"},{key:"Giereth2005"},{key:"RdfB2004"}]}}),e._v(". An ontology is a schema containing classes, instances, properties, data types, cardinalities and more "),r("Citation",{attrs:{references:e.references,citations:[{key:"Giereth2005"}]}}),e._v("."),r("br"),e._v("\n An ontology provides lots of information about the domain of an RDF Graph and thus can be used for attacks. For example, an attacker who tries to guess the plaintext just has to check all values provided by the corresponding ontology. "),r("Citation",{attrs:{references:e.references,citations:[{key:"Giereth2005"}]}})],1),e._v(" "),r("p",[r("b",[e._v("Data Integrity")]),e._v(" Additional security methods such as checksums using hash functions can be used for data integrity checks "),r("Citation",{attrs:{references:e.references,citations:[{key:"Giereth2005"}]}}),e._v(".\n ")],1),e._v(" "),r("p",[r("b",[e._v("Access")]),e._v(" Anyone with access to the graph can access all non-sensitive plaintext data. Only authorized individuals can access encrypted data by decrypting the corresponding fragments.\n ")]),e._v(" "),r("p",[r("b",[e._v("Working with the Data")]),e._v(" After encryption, it is still possible for everyone to work on the non-encrypted data. The encrypted fragments can be decrypted by authorized individuals if necessary to access this information.\n ")]),e._v(" "),r("h2",{attrs:{id:"sec:discussion"}},[e._v("Discussion")]),e._v(" "),r("p",[e._v("\n Both solution approaches presented in this article â full encryption and partial encryption â can hide both types of information: label information and structural information.\n ")]),e._v(" "),r("p",[e._v("\n The full encryption process offers privacy that depends only on the cryptographic methods used. The complete data is protected by the encryption. The data can only be used to a very limited extent: The data set must be accessed and decrypted completely, even if only one piece of information is needed. Added value from the information â sensitive as well as non-sensitive â is reserved for authorized individuals only.\n ")]),e._v(" "),r("p",[e._v("\n The partial encryption process can protect sensitive parts of the graph and still allow one to work with the partially encrypted graph. The strength of the encryption itself depends on the applied cryptographic methods. Independent of the cryptographic algorithm, partially encrypted graphs can reveal some information about their structure. The process always produces an overhead, independent of the cryptographic methods used, since additional elements are inserted into the graph. The partial encryption process is more complex than the full encryption. One consequence of this is that it potentially provides more sources of failure. There is a risk that sensitive data remains in the graph as plaintext. The selection of the right elements for encryption is the main challenge to ensure that no information is leaked unintentionally. Extended selection rules can be used for the partial encryption process. Such selection rules describe what statements have to be encrypted when a specific element is selected to gain a higher level of security "),r("Citation",{attrs:{references:e.references,citations:[{key:"Gerbracht2008"},{key:"Giereth2005"}]}}),e._v(". The risk of sensitive data remaining as plaintext in the graph can thus be reduced to a minimum. However, it cannot be completely eliminated. With this condition in mind and with regard to the information derived from the structure, it can be stated: With partially encrypted graphs, there always remains a certain risk of unintentional information leakage.\n ")],1),e._v(" "),r("h2",{attrs:{id:"sec:outlook"}},[e._v("Conclusion and Outlook")]),e._v(" "),r("p",[e._v("\n The approaches presented in this article are above all a tradeoff between maximal privacy and the ability to still work on the data. As so often, the question of which method is better depends completely on the system requirements: If sensitive data is to be protected at all costs, complete data encryption is to be preferred. If concepts of the Semantic Web are the more important aspects, partially encrypted graphs can offer a suitable solution.\n ")]),e._v(" "),r("p",[e._v("\n An important feature of the Semantic Web is the ability to merge distributed data and re-use data. This is hard to accomplish on fully encrypted data. A solution where only sensitive data is encrypted and non-sensitive data as well as non-critical data derived from encrypted data is still available for processing is desirable. The partial encryption process is such a solution approach. Everybody can work on non-encrypted parts of the graph, and further concepts can be applied in order to provide the ability to work on the masked data. Advanced methods as presented in "),r("Citation",{attrs:{references:e.references,citations:[{key:"Kepner2014"}]}}),e._v(" use sparse linear algebra of associative arrays to enable work on the masked data itself without having to decrypt the data. Analyzing encrypted data to gain knowledge offers a lot of potential for the Semantic Web.\n ")],1),e._v(" "),r("p",[e._v("\n The complete encryption of RDF graphs does not require other concepts apart from the cryptographic methods. A lot of research is being done in the field of cryptography. Partially encrypted RDF graphs offer many advantages. Much can still be researched in this direction until the disadvantages of the methods are reduced to a minimum.\n ")]),e._v(" "),r("p",[e._v("\n Ultimately, a system should always strive for a state of optimal privacy. This is necessary to best serve the interests of society: Protecting the privacy of individuals while enabling general progress through knowledge gain.\n ")]),e._v(" "),r("h2",[e._v("References")]),e._v(" "),r("ListOfReferences",{attrs:{references:e.references}})],1)],1)],1)}),[],!1,null,"3b0a5fa1",null);t.default=component.exports;installComponents(component,{WindowElement:n(356).default,Citation:n(506).default,PaperPatch:n(357).default,CaptionTarget:n(600).default,Hyperlink:n(63).default,ListOfReferences:n(507).default,PaperPage:n(354).default,ArticleLayout:n(484).default})},function(e,t,n){"use strict";n.r(t),n.d(t,"metadata",(function(){return o}
1));var r=n(359),o={project:{identity:{title:"Event Shape",shortDescription:"A web application for events.",subdirectory:"event-shape"},promotion:{icon:{source:n(624)},reel:{source:n(625),fallbackSource:n(626),poster:n(627),type:"video"}},preview:{detailed:{},reel:{}},categories:{values:["design","technology"]},types:{values:["web app"],description:"Event Shape is a web app for events."},history:{in:{date:{year:2018}}}}},l={name:"EventShape",layout:"default",computed:{reelMetadata:function(){return Object(r.e)(this.metadata.project)}},created:function(){this.metadata=o}},c=n(2),component=Object(c.a)(l,(function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("SimpleProjectLayout",{attrs:{metadata:e.metadata}},[n("PaperPage",{attrs:{"use-with-paper-patches":""}},[n("PaperPatch",[n("p",[e._v("\n EventShape is a web service focused on event planning. It helps hosts make their events successful and build communities by empowering attendees to shape the event. It was developed by Daniel, Max, Tim and me for a course at the university.\n ")]),e._v(" "),n("p",[n("b",[e._v("Motivation:")]),e._v(" We wanted to develop Event Shape for the "),n("Hyperlink",{attrs:{to:"/semester-game-jam"}},[e._v("semester game jam")]),e._v(". A game jam, which is organized every semester by students of our faculty at TUM. The web application is the central communication platform between the participants and the organization team.\n ")],1),e._v(" "),n("p",[n("b",[e._v("Technology:")]),e._v(" The application was developed using React. Technologies involved include Redux, Router, History, ExpressJS, MongoDB, and JWT.\n ")])]),e._v(" "),n("WindowElement",{attrs:{"media-metadata":[e.reelMetadata],"hide-signature":"","hide-divider-in-feed":"","thumbnail-container-aspect-ratio":"portrait",title:"Impressions"}})],1)],1)}),[],!1,null,null,null);t.default=component.exports;installComponents(component,{Hyperlink:n(63).default,PaperPatch:n(357).default,WindowElement:n(356).default,PaperPage:n(354).default,SimpleProjectLayout:n(370).default})},function(e,t,n){"use strict";n.r(t),n.d(t,"metadata",(function(){return r}));var r={project:{identity:{title:"Sleepy Storm",shortDescription:"A sci-fi top-down shooter game.",externalProjectUrl:"https://wiki.tum.de/x/twO9Cw",subdirectory:"sleepy-storm"},promotion:{icon:{source:n(546)},reel:{source:n(628),fallbackSource:n(629),poster:n(630),type:"video"}},preview:{detailed:{pin:{source:n(546)}}},categories:{values:["games"]},types:{values:["game"]},history:{in:{date:{year:2019}}}}},o={name:"SleepyStorm",layout:"default",created:function(){this.metadata=r}},l=n(2),component=Object(l.a)(o,(function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("SimpleProjectLayout",{attrs:{metadata:e.metadata}},[n("PaperPage",{attrs:{"use-with-paper-patches":""}},[n("PaperPatch",[n("p",[e._v("\n Sleepy Storm is a twin-stick top-down action game. You defeat bosses and boss waves in an arena-like environment, while trying not to be defeated yourself.\n ")]),e._v(" "),n("p",[n("b",[e._v("Gameplay:")]),e._v(" The game is about defeating bosses and boss waves in an arena-like environment while trying not to be defeated yourself. Movement is an essential part of gameplay. The key to success is to avoid damage zones while engaging in combat and defeating the enemies. To achieve the goal, you have access to a variety of offensive abilities, defensive skills such as a shield, and movement abilities, including dashes.\n ")]),e._v(" "),n("p",[n("b",[e._v("Streamer Interaction:")]),e._v(" This experience gets especially exciting when you share your gameplay with others via Twitch streams. The game offers a social component that lets your viewers become part of the game. They can either take on the role of your drone to support you or play against you by fighting on the side of your opponents. Through a web interface, viewers can control different skills. Some can be used individually by each spectator and others are influenced by all spectators together.\n ")]),e._v(" "),n("p",[e._v("\n The project was developed in 2021 by Jana, Max, Jakob, and I for a practical course. Check out the "),n("Hyperlink",{attrs:{to:"https://github.com/dyrdadev/mappers-peak"}},[e._v("project page")]),e._v(" for more details. I really like the game, and I have learned a lot during its development. I definitely want to write some kind of postmortem about the lessons learned in the near future.\n ")],1)]),e._v(" "),n("WindowElement",{attrs:{"media-metadata":[e.metadata.project.promotion.reel],title:"Impressions","hide-divider-in-feed":""}})],1)],1)}),[],!1,null,null,null);t.default=component.exports;installComponents(component,{Hyperlink:n(63).default,PaperPatch:n(357).default,WindowElement:n(356).default,PaperPage:n(354).default,SimpleProjectLayout:n(370).default})},function(e,t,n){"use strict";n.r(t),n.d(t,"metadata",(function(){return l}));var r=n(370),o=n(355),l={project:{identity:{title:"Singleton MonoBehaviour for Unity",shortTitle:"Singleton MonoBehaviour",shortDe
1scription:"A free Singleton MonoBehaviour implementation for Unity.",externalProjectUrl:"https://github.com/dyrdadev/singleton-mono-behaviour",subdirectory:"singleton-mono-behaviour-for-unity"},preview:{},promotion:{icon:{source:n(502)},gallery:{items:[{source:n(502),alt:'A screenshot of the game "Marble Maze".',thumbnail:{source:n(502),alt:""},type:"image"}]}},categories:{values:["games","technology"]},types:{values:["asset"]},history:{from:{version:"0.0.1",date:{year:2020,month:10,day:20}},to:{today:!0},last:{version:"0.0.6",date:{year:2021,month:4,day:12}}}}},c={name:"SingletonMonoBehaviour",components:{TextBlock:o.default,SimpleProjectLayout:r.default},layout:"default",created:function(){this.metadata=l}},d=n(2),component=Object(d.a)(c,(function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("SimpleProjectLayout",{attrs:{metadata:e.metadata}},[n("PaperPage",{attrs:{"use-with-paper-patches":""}},[n("PaperPatch",[n("p",[e._v("\n This package for Unity provides an implementation of the Singleton pattern for MonoBehaviour instances. The package introduces the SingletonMonoBehaviour class. With this class, we can create concrete MonoBehaviour components that can be added to game objects in the scene and behave in the same way as classic MonoBehaviour componentsâjust as a singleton.\n ")]),e._v(" "),n("p",[e._v("\n If you want to read more about the singleton pattern, check out "),n("Hyperlink",{attrs:{to:"http://gameprogrammingpatterns.com/singleton.html"}},[e._v("Game Programming Patterns - Singleton")]),e._v(" by Robert Nystrom.\n ")],1),e._v(" "),n("p",[n("b",[e._v("Quick Start:")]),e._v(" You may find yourself in the following situation: you have a class that currently inherits from MonoBehaviour and you want it to be a Singleton. Don't worry, it's super easy to use the package. Just follow the "),n("Hyperlink",{attrs:{to:"https://github.com/dyrdadev/singleton-mono-behaviour#quick-start"}},[e._v("Quick Start guide")]),e._v(" from the project readme.\n ")],1),e._v(" "),n("p",[n("b",[e._v("Features:")]),e._v(' The class implements the most common features described for MonoBehaviour Singletons. The feature list includes Event Functions, Persistence, "Exactly one Singleton, not more", "Exactly one Singleton, not less", Inactive Singletons, Thread Safety, Loading on Demand, Performance Optimizations, and Logging. You can find a complete list with all features and more details in the '),n("Hyperlink",{attrs:{to:"https://github.com/dyrdadev/singleton-mono-behaviour"}},[e._v("project readme")]),e._v(".\n ")],1),e._v(" "),n("p",[n("b",[e._v("The project is free and open source:")]),e._v(" You can find the source code and further details in the "),n("Hyperlink",{attrs:{to:"https://github.com/dyrdadev/singleton-mono-behaviour"}},[e._v("project repository")]),e._v("\n on GitHub. If you are interested in updates, "),n("Hyperlink",{attrs:{to:"/contact"}},[e._v("get in touch")]),e._v(" and support the project.\n ")],1)]),e._v(" "),n("WindowElement",{attrs:{"media-metadata":e.metadata.project.promotion.gallery.items,"hide-divider-in-feed":""}})],1)],1)}),[],!1,null,null,null);t.default=component.exports;installComponents(component,{Hyperlink:n(63).default,PaperPatch:n(357).default,WindowElement:n(356).default,PaperPage:n(354).default,SimpleProjectLayout:n(370).default})},function(e,t,n){"use strict";n.r(t),n.d(t,"metadata",(function(){return o}));var r=n(482),o={project:{identity:{title:"Web Development",shortDescription:"All about web development.",subdirectory:"web-development"},promotion:{icon:{source:n(631)},background:{source:n(632),textColor:"#253057"}},preview:{detailed:{type:"meta"}},categories:{values:["technology","design"]},history:{from:{date:{year:2016}},to:{date:{year:2020}}}}},l={name:"WebDevelopment",components:{MastodonLink:r.default},layout:"default",created:function(){this.metadata=o}},c=n(2),component=Object(c.a)(l,(function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("SimpleScrollingLayout",{attrs:{metadata:e.metadata}},[n("TextBlock",{class:[]},[n("p",[e._v("\n At some point, I started developing for the web. Web development is fun (sometimes). Here I would like to give you an overview of related projects.\n ")]),e._v(" "),n("h2",[e._v("Related Projects")]),e._v(" "),n("ul",[n("li",[n("Hyperlink",{attrs:{to:"/play-discuss-women-in-science"}},[e._v("Play x Discuss: Women in Science")])],1),e._v(" "),n("li",[n("Hyperlink",{attrs:{to:"/zeit"}},[e._v("Zeit [Ëtsaɪ̯t]")])],1),e._v(" "),n("li",[n("Hyperlink",{attrs:{to:"/pacemaker-a-practical-tool-for-pacing-video-games"}},[e._v("PaceMaker")])],1),e._v(" "),n("li",[n("Hyperlink",{attrs:{to:"/event-shape"}},[e._v("Event Shape")])],1),e._v(" "),n("li",[e._v("\n This web page. :)\n ")]),e._v(" "),n("li",[e._v("\n Many of the projects I work on with students are also from this area. You can find a list "),n("Hyperlink",{attrs:{to:"/academic-profile/student-projects"}}
1,[e._v("here")]),e._v(".\n ")],1)])])],1)}),[],!1,null,null,null);t.default=component.exports;installComponents(component,{Hyperlink:n(63).default,TextBlock:n(355).default,SimpleScrollingLayout:n(368).default})},function(e,t,n){"use strict";n.r(t),n.d(t,"metadata",(function(){return o}));var r=n(111),o={project:{identity:{title:"Boss Board",shortDescription:"A table-top tool to create game bosses.",subdirectory:"boss-board"},promotion:{icon:{source:n(633)}},preview:{detailed:{}},categories:{values:["design"]},history:{in:{date:{year:2022}}}}},l={name:"BossBoard",components:{LinkedInLink:r.default},layout:"default",created:function(){this.metadata=o}},c=n(2),component=Object(c.a)(l,(function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("SimpleScrollingLayout",{attrs:{metadata:e.metadata}},[n("TextBlock",{class:[]},[n("p",[e._v('\n "Boss Board" is a table-top tool to create game bosses. It is currently under development. But stay tuned, my students and I are working hard on this project. I hope to release something about this project soon. :)\n ')]),e._v(" "),n("p",[e._v("\n In the meantime, you can check out the other pages. Follow me on "),n("LinkedInLink"),e._v(" to be notified when the project page is online.\n ")],1)])],1)}),[],!1,null,null,null);t.default=component.exports;installComponents(component,{LinkedInLink:n(111).default,TextBlock:n(355).default,SimpleScrollingLayout:n(368).default})},function(e,t,n){"use strict";n.r(t),n.d(t,"metadata",(function(){return c}));var r=n(634),o=n.n(r),l=n(482),c={project:{identity:{title:"Game Bosses",shortDescription:"Designing and engineering bosses for games.",subdirectory:"game-bosses"},promotion:{icon:{source:n(635),svg:o.a},background:{source:n(516),textColor:"#143B39"}},preview:{detailed:{type:"meta"}},categories:{values:["science","design","games","technology"]},history:{from:{date:{year:2020}},to:{today:!0}}}},d={name:"GameBosses",components:{LinkedInLink:l.default},layout:"default",created:function(){this.metadata=c}},m=n(2),component=Object(m.a)(d,(function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("SimpleScrollingLayout",{attrs:{metadata:e.metadata}},[n("TextBlock",{class:[]},[n("p",[e._v("\n I am in the process of implementing my new website. This page is not ready yet. Sorry! In the meantime, you can check out the other pages. Follow me on "),n("LinkedInLink"),e._v(" to be notified when the complete site is online.\n ")],1)])],1)}),[],!1,null,null,null);t.default=component.exports;installComponents(component,{LinkedInLink:n(111).default,TextBlock:n(355).default,SimpleScrollingLayout:n(368).default})},function(e,t,n){"use strict";n.r(t),n.d(t,"metadata",(function(){return r}));var r={project:{identity:{title:"Gamespaces",shortDescription:"Gamespaces and virtual Worlds.",subdirectory:"gamespaces"},promotion:{icon:{source:n(636)},background:{source:n(516),textColor:"#12282C"}},preview:{detailed:{type:"meta"}},categories:{values:["science","design","games","technology"]},history:{from:{date:{year:2019}},to:{today:!0}}}},o={name:"Gamespaces",layout:"default",created:function(){this.metadata=r}},l=n(2),component=Object(l.a)(o,(function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("SimpleScrollingLayout",{attrs:{metadata:e.metadata}},[n("TextBlock",{class:[]},[n("p",[e._v("\n One of my main research topics revolves around gamespaces. Here I want to give you an overview of related projects.\n ")]),e._v(" "),n("h2",[e._v("Related Projects")]),e._v(" "),n("ul",[n("li",[n("Hyperlink",{attrs:{to:"/gamespace-knowledge-graph"}},[e._v("Gamespace Knowledge Graph")])],1),e._v(" "),n("li",[e._v("\n Research paper: "),n("Hyperlink",{attrs:{to:"/space-foundation-system-an-approach-to-spatial-problems-in-games"}},[e._v("Space Foundation System: An Approach to Spatial Problems in Games")])],1),e._v(" "),n("li",[e._v("\n Research paper: "),n("Hyperlink",{attrs:{to:"/a-time-and-space-efficient-adaptation-of-the-space-foundation-system-for-digital-games"}},[e._v("A Time- and Space-Efficient Adaptation of the Space Foundation System for Digital Games")])],1),e._v(" "),n("li",[e._v("\n Research paper: "),n("Hyperlink",{attrs:{to:"/proposing-formal-game-spaces-as-foundation-for-gameplay-based-anti-cheating-measures"}},[e._v("Proposing Formal Game Spaces as Foundation for Gameplay-Based Anti-Cheating Measures")])],1),e._v(" "),n("li",[e._v("\n Research paper: "),n("Hyperlink",{attrs:{to:"/towards-a-unified-system-for-controlling-aesthetics-in-video-games-using-graph-base-spatial
1-models"}},[e._v("Towards a Unified System for Controlling Aesthetics in Video Games Using Graph-Based Spatial Models")])],1),e._v(" "),n("li",[e._v("\n Research paper: "),n("Hyperlink",{attrs:{to:"/toward-a-unified-spatial-interface-for-controlling-procedural-content-generation"}},[e._v("Toward a Unified Spatial Interface for Controlling Procedural Content Generation")])],1),e._v(" "),n("li",[e._v("\n Research paper: "),n("Hyperlink",{attrs:{to:"/zeer-a-spatial-task-management-tool-for-game-development"}},[e._v("ZEER: A Spatial Task Management Tool for Game Development")])],1),e._v(" "),n("li",[e._v("\n Research paper: "),n("Hyperlink",{attrs:{to:"/proposing-formal-game-spaces-as-foundation-for-gameplay-based-anti-cheating-measures"}},[e._v("Proposing Formal Game Spaces as Foundation for Gameplay-Based Anti-Cheating Measures")])],1),e._v(" "),n("li",[e._v("\n Research paper: "),n("Hyperlink",{attrs:{to:"/playtesting-without-humans"}},[e._v("Playtesting Without Humans: Agent-Based Modeling as Testing Tool for Game Spaces ")])],1),e._v(" "),n("li",[e._v("\n University course: "),n("Hyperlink",{attrs:{to:"/teaching/level-engineering"}},[e._v("Level Engineering")])],1),e._v(" "),n("li",[e._v("\n Many of the projects I work on with students are also from this area. You can find a list "),n("Hyperlink",{attrs:{to:"/academic-profile/student-projects"}},[e._v("here")]),e._v(".\n ")],1)]),e._v(" "),n("h2",[e._v("Further Reading")]),e._v(" "),n("p",[e._v("\n For further reading, you can check out the following sources: "),n("Hyperlink",{attrs:{to:"https://opac.ub.tum.de/TouchPoint/perma.do?q=+0%3D%22ZDB-30-ORH-047598867%22+IN+%5B2%5D&v=tum&l=de"}},[e._v('"An Architectural Approach to Level Design"')]),e._v(" by Totten (2018), and "),n("Hyperlink",{attrs:{to:"https://opac.ub.tum.de/TouchPoint/perma.do?q=+1035%3D%22BV043991844%22+IN+%5B2%5D&v=tum&l=de"}},[e._v('"3D User Interfaces: Theory and Practice"')]),e._v(" by LaViola et al. (2017).\n ")],1),e._v(" "),n("p",[n("Hyperlink",{attrs:{to:"/game-design-engineering"}},[e._v("Here")]),e._v(" you can find a more extensive list of literature that I recommend to anyone creating games.")],1)])],1)}),[],!1,null,null,null);t.default=component.exports;installComponents(component,{Hyperlink:n(63).default,TextBlock:n(355).default,SimpleScrollingLayout:n(368).default})},function(e,t,n){"use strict";n.r(t),n.d(t,"metadata",(function(){return r}));var r={project:{identity:{title:"Game Design Engineering",shortDescription:"Creating Games.",subdirectory:"game-design-engineering"},promotion:{icon:{source:n(637)},background:{source:n(517),textColor:"#5E3328"}},preview:{detailed:{type:"meta"}},categories:{values:["science","design","games","technology"]},history:{from:{date:{year:2019}},to:{today:!0}}}},o={name:"GameDesignEngineering",layout:"default",created:function(){this.metadata=r}},l=n(2),component=Object(l.a)(o,(function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("SimpleScrollingLayout",{attrs:{metadata:e.metadata}},[n("TextBlock",{class:[]},[n("p",{},[e._v("\n The main focus of my professional career is the game design engineering process. Relevant research is collected under "),n("Hyperlink",{attrs:{to:"/science"}},[e._v("Science")]),e._v(", and the "),n("Hyperlink",{attrs:{to:"/games"}},[e._v("Games")]),e._v(" section lists the games I worked on.\n ")],1),e._v(" "),n("h2",[e._v("Recommended Reading")]),e._v(" "),n("p",[e._v("\n Here is an incomplete list of literature that I recommend to anyone who wants to create games. "),n("span",{staticClass:"comment"},[e._v("\n It is incomplete and dynamic, I will update it in the future. I'm not sure if the order is important. But if in doubt, I would just start at the top.\n ")])]),e._v(" "),n("ul",[n("li",[n("Hyperlink",{attrs:{to:"https://opac.ub.tum.de/TouchPoint/perma.do?q=+1035%3D%22BV017013645%22+IN+%5B2%5D&v=tum&l=de"}},[e._v('"Rules of Play"')]),e._v(" by Salen and Zimmerman (2004).\n ")],1),e._v(" "),n("li",[n("Hyperlink",{attrs:{to:"https://opac.ub.tum.de/TouchPoint/perma.do?q=+1035%3D%22BV046277895%22+IN+%5B2%5D&v=tum&l=de"}},[e._v('"The Art of Game Design: A Book of Lenses"')]),e._v(" by Schell (2019).\n ")],1),e._v(" "),n("li",[n("Hyperlink",{attrs:{to:"https://www.google.de/books/edition/Understanding_Comics/tUwqbo48lp4C"}},[e._v('"Defining Game Mechanicsâ')]),e._v(" by Sicart (2008).\n ")],1),e._v(" "),n("li",[n("Hyperlink",{attrs:{to:"https://www.google.de/books/edition/Understanding_Comics/tUwqbo48lp4C"}},[e._v('"Understanding Comics: The Invisible Art"')]),e._v(" by McCloud (1994).\n ")],1),e._v(" "),n("li",[n("Hyperlink",{attrs:{to:"https://www.google.de/books/edition/The_Design_of_Everyday_Things/heCtnQEACAAJ"}},[e._v('"The Design of Everyday Things"')]),e._v(" by Norman (2013).\n ")],1),e._v(" "),n("li",[n("Hyperlink",{attrs:{to:"https://www.google.de/books/edition/Flow/QVjPsd1UukEC"}},[e._v('"Flow: The Psychology of Optimal Experience"')]),e._v(" by Csikszentmihalyi (2009).\n ")],1),e._v(" "),n("li",[n("Hyperlink",{attrs:{to:"https://opac.ub.tum.de/TouchPoint/perma.do?q=+0%3D%22ZDB-30-ORH-047598867%22+IN+%5B2%5D&v=tum&l=de"}},[e._v('"An Architectural Approach to Level Design"')]),e._v(" by Totten (2018).\n ")],1),e._v(" "),n("li",[n("Hyperlink",{attrs:{to:"https://opac.ub.tum.de/TouchPoint/perma.do?q=+1035%3D%22BV043991844%22+IN+%5B2%5D&v=tum&l=de"}},[e._v('"3D User Interfaces: Theory and Practice"')]),e._v(" by LaViola et al. (2017).\n ")],1),e._v(" "),n("li",[n("Hyperlink",{attrs:{to:"https://opac.ub.tum.de/TouchPoint/perma.do?q=+0%3D%22ZDB-30-ORH-053531396%22+IN+%5B2%5D&v=tum&l=de"}},[e._v('"Game Engine Architecture"')]),e._v(" by Gregory (2018).\n ")],1)])])],1
1)}),[],!1,null,null,null);t.default=component.exports;installComponents(component,{Hyperlink:n(63).default,TextBlock:n(355).default,SimpleScrollingLayout:n(368).default})},function(e,t,n){"use strict";n.r(t),n.d(t,"metadata",(function(){return r}));var r={project:{identity:{title:"Game Research",shortDescription:"A Science Perspective.",subdirectory:"science"},promotion:{icon:{source:n(638)},background:{source:n(517),textColor:"#5E3328"}},preview:{priority:3,detailed:{type:"meta"}},categories:{values:["design","games"]},history:{from:{date:{year:2019}},to:{today:!0}}}},o={name:"GameResearch",layout:"default",created:function(){this.metadata=r}},l=n(2),component=Object(l.a)(o,(function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("SimpleScrollingLayout",{attrs:{metadata:e.metadata}},[n("TextBlock",{class:[]},[n("p",{},[n("Hyperlink",{attrs:{to:"/science"}},[e._v("Game Research")])],1)])],1)}),[],!1,null,null,null);t.default=component.exports;installComponents(component,{Hyperlink:n(63).default,TextBlock:n(355).default,SimpleScrollingLayout:n(368).default})},function(e,t,n){"use strict";n.r(t),n.d(t,"metadata",(function(){return r}));var r={project:{identity:{title:"Game Teaching",shortDescription:"A Teaching Perspective.",subdirectory:"teaching"},promotion:{icon:{source:n(639)},background:{source:n(640),textColor:"#524322"}},preview:{priority:3,detailed:{type:"meta"}},categories:{values:["science","design","games","technology"]},history:{from:{date:{year:2019}},to:{today:!0}}}},o={name:"GameTeaching",layout:"default",created:function(){this.metadata=r}},l=n(2),component=Object(l.a)(o,(function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("SimpleScrollingLayout",{attrs:{metadata:e.metadata}},[n("TextBlock",{class:[]},[n("p",{},[n("Hyperlink",{attrs:{to:"/teaching"}},[e._v("Game Teaching")])],1)])],1)}),[],!1,null,null,null);t.default=component.exports;installComponents(component,{Hyperlink:n(63).default,TextBlock:n(355).default,SimpleScrollingLayout:n(368).default})},function(e,t,n){"use strict";n.r(t),n.d(t,"metadata",(function(){return r}));
1var r={project:{identity:{title:"Games",shortDescription:"Projects and more.",subdirectory:"games"},promotion:{icon:{source:n(641)},background:{source:n(642),textColor:"#173045"}},preview:{priority:5,detailed:{type:"meta"}},categories:{values:["science","design","technology"]},history:{from:{date:{year:2019}},to:{today:!0}}}},o={name:"GameProjects",layout:"default",created:function(){this.metadata=r}},l=n(2),component=Object(l.a)(o,(function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("SimpleScrollingLayout",{attrs:{metadata:e.metadata}},[n("TextBlock",{class:[]},[n("p",{},[n("Hyperlink",{attrs:{to:"/games"}},[e._v("Game Projects")])],1)])],1)}),[],!1,null,null,null);t.default=component.exports;installComponents(component,{Hyperlink:n(63).default,TextBlock:n(355).default,SimpleScrollingLayout:n(368).default})},function(e,t,n){"use strict";n.r(t),n.d(t,"metadata",(function(){return o}));var r=n(482),o={project:{identity:{title:"Diversity, Equity, and Inclusion",shortDescription:"Solutions that represent us.",subdirectory:"diversity-equity-and-inclusion"},promotion:{icon:{source:n(643)},background:{source:n(644),textColor:"#1E163B"}},preview:{detailed:{type:"meta"}},categories:{values:["science","design","games","technology"]},history:{from:{date:{year:2018}},to:{today:!0}}}},l={name:"DiversityEquityAndInclusion",components:{MastodonLink:r.default},layout:"default",created:function(){this.metadata=o}},c=n(2),component=Object(c.a)(l,(function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("SimpleScrollingLayout",{attrs:{metadata:e.metadata}},[n("TextBlock",{class:[]},[n("p",[e._v("\n Diversity, Equity, and Inclusion are important topics for me. Here I want to give you an overview of related projects.\n ")]),e._v(" "),n("h2",[e._v("Related Projects")]),e._v(" "),n("ul",[n("li",[n("Hyperlink",{attrs:{to:"/how-do-i-implement-it_towards-software-patterns-for-accessible-player-experience"}},[e._v("How Do I Implement It? Towards Software Patterns for Accessible Player Experience")])],1),e._v(" "),n("li",[n("Hyperlink",{attrs:{to:"/play-discuss-women-in-science"}},[e._v("Play x Discuss: Women in Science â Game Project")])],1),e._v(" "),n("li",[n("Hyperlink",{attrs:{to:"/play-discuss-women-in-science"}},[e._v("Play x Discuss: Women in Science â Scientific Paper ")])],1),e._v(" "),n("li",[e._v("\n Many of the projects I work on with students are also from this area. You can find a list "),n("Hyperlink",{attrs:{to:"/academic-profile/student-projects"}},[e._v("here")]),e._v(".\n ")],1)])])],1)}),[],!1,null,null,null);t.default=component.exports;installComponents(component,{Hyperlink:n(63).default,TextBlock:n(355).default,SimpleScrollingLayout:n(368).default})},function(e,t,n){"use strict";n.r(t),n.d(t,"metadata",(function(){return o}));var r=n(387),o={project:{identity:{title:"Flowers I",shortDescription:"A photography collection from 2019.",subdirectory:"flowers-i"},promotion:{icon:{source:n(645)},reel:{source:n(646),fallbackSource:n(647),poster:n(648),type:"video"}},preview:{detailed:{}},categories:{values:["art"]},types:{values:["Photography"]},history:{from:{date:{year:2019}},to:{today:!0}}}},l={name:"Index",components:{ArtGalleryProjectLayout:r.default},layout:"default",data:function(){return{galleryItems:[{source:n(649),alt:"",type:"image",thumbnail:{source:n(650),alt:""},title:"The Soft One",credit:{label:"Daniel Dyrda"},year:2019},{source:n(651),type:"image",alt:"",thumbnail:{source:n(652),alt:""},title:"The High Key",credit:{label:"Daniel Dyrda"},year:2019},{source:n(653),type:"image",alt:"",thumbnail:{source:n(654),alt:""},title:"The Edgy One",credit:{label:"Daniel Dyrda"},year:2019},{source:n(655),type:"image",alt:"",thumbnail:{source:n(656),alt:""},title:"The Shy One",credit:{label:"Daniel Dyrda"},year:2019}]}},created:function(){this.metadata=o}},c=n(2),component=Object(c.a)(l,(function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("ArtGalleryProjectLayout",{attrs:{metadata:e.metadata,"gallery-items":e.galleryItems}},[n("PaperPage",{attrs:{"use-with-paper-patches":""}},[n("PaperPatch",[n("p",[e._v("\n calm down!"),n("br"),e._v("\n take a breathe!"),n("br"),e._v("\n what are you afraid of?"),n("br"),e._v("\n if there is no meaning, you can give things a meaning.\n ")]),e._v(" "),n("p",{staticClass:"subtle"},[e._v("\n â â â â â â â ºâ â "),n("br"),e._v("\n â â â
â â â â â â â â â â "),n("br"),e._v("\n â ºâ â â â â â â ½â â ¥ â â â â â â â â â ¦"),n("br"),e._v("\n â ºâ â â â â â â â â â â â â â â â â â â â â ½â â ¥ â â â â â â §â â â â â â â â â â â â â â â ²"),n("br")]),e._v(" "),n("p",[n("i",[e._v("Flowers I")]),e._v(" is a series of black and white photographs from 2019.\n ")]),e._v(" "),n("p",{staticClass:"subtle"},[e._v("\n â â â â ºâ â â â â â â â â â â â â â â â â â â â
â â â â ºâ â â â â â â â â â â â â â â â â â â â ¼â â ¼â â ¼â â ¼â â ²\n ")])]),e._v(" "),n("WindowElement",{attrs:{"media-metadata":e.galleryItems,"hide-baked-signature":"",title:"Gallery","hide-divider-in-feed":""}})],1)],1)}),[],!1,null,null,null);t.default=component.exports;installComponents(component,{PaperPatch:n(357).default,WindowElement:n(356).default,PaperPage:n(354).default,ArtGalleryProjectLayout:n(387).default})},function(e,t,n){"use strict";n.r(t),n.d(t,"metadata",(function(){return r}));
1var r={project:{identity:{title:"Zeit [Ëtsaɪ̯t]",shortDescription:"An exploration of moments. Captured on film.",subdirectory:"zeit",externalProjectUrl:"https://zeit.dyrda.art"},promotion:{icon:{source:n(657)},reel:{source:n(547),fallbackSource:n(548),poster:n(549),type:"video"}},preview:{detailed:{}},categories:{values:["art"]},types:{values:["Film"]},history:{from:{date:{year:2019}},to:{today:!0}}}},o={name:"Index",layout:"default",data:function(){return{galleryItems:[{source:n(547),fallbackSource:n(548),poster:n(549),type:"video",title:"Zeit [Ëtsaɪ̯t] reel",caption:"",credit:{label:"Daniel Dyrda"},year:2019}]}},created:function(){this.metadata=r}},l=n(658),c=n(2);var component=Object(c.a)(o,(function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("SimpleProjectLayout",{attrs:{metadata:e.metadata,"layout-variation":"gallery"}},[n("PaperPage",{attrs:{"use-with-paper-patches":""}},[n("PaperPatch",[n("p",[e._v("\n Zeit [Ëtsaɪ̯t] is an ongoing body of work exploring patterns in space and time, isolated circumstance of a larger whole, details of presence, captured on film. Static only in place, not in time: the perspective of Zeit [Ëtsaɪ̯t] documents my journey into the unknown, in an attempt to return to an open-minded and naïve perspective on life â unsuccessful to date.\n ")]),e._v(" "),n("p",{staticClass:"subtle",class:e.$style.lautschrift},[e._v("\n â µâ â â [â â â â â â ] â â â â â â â â â â â â â â â ½ â â â ºâ â â
â â â â â â â â â â â â â â â â â â â â â â â â â â â â â â â â â â â â â â â â â â â â â ¥â â â â â â â â â â â â â â â â â ºâ â â â â â â â â â â â â â â â â â â â â â â â â â â â ¥â â â â â â â â â â ² â â â â â â â â â â ½ â â â â â â â â â â â â â â â â â â â â â â â â â â â â â â â §â â â â µâ â â [â â â â â â ] â â â â ¥â â â â â â â â â ¥â â â â ½ â â â â â â â â ¥â â
â â â ºâ â â â â â ½ â â â â â â â â â â â â â ¥â â â â â â â â â â â ¤â â â â â â â â â â â â â §â â â â â â â â â â â §â â â â â â â â ¤ â ¥â â â ¥â â â â â â â ¥â â â â â â â â ²\n ")])]),e._v(" "),n("WindowElement",{attrs:{"media-metadata":e.galleryItems,"hide-divider-in-feed":"",title:"Gallery"}})],1)],1)}),[],!1,(function(e){this.$style=l.default.locals||l.default}),"3b781876",null);t.default=component.exports;installComponents(component,{PaperPatch:n(357).default,WindowElement:n(356).default,PaperPage:n(354).default,SimpleProjectLayout:n(370).default})},function(e,t,n){"use strict";n.r(t),n.d(t,"metadata",(function(){return r}));var r={project:{identity:{title:"Hierarchy Tree for Unity",shortDe
1scription:"A tree view for Unity's hierarchy window.",externalProjectUrl:"https://github.com/dyrdadev/hierarchy-tree-for-unity",subdirectory:"hierarchy-tree-for-unity"},promotion:{icon:{source:n(660)},reel:{source:n(661),fallbackSource:n(662),poster:n(663),type:"video"}},preview:{detailed:{}},categories:{values:["games","technology"]},types:{values:["asset"]},history:{in:{date:{year:2022}}}}},o={name:"HierarchyTreeForUnity",layout:"default",created:function(){this.metadata=r}},l=n(2),component=Object(l.a)(o,(function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("SimpleProjectLayout",{attrs:{metadata:e.metadata}},[n("PaperPage",{attrs:{"use-with-paper-patches":""}},[n("PaperPatch",[n("p",[e._v("\n \"Hierarchy Tree\" is an asset package for Unity. The package renders a tree view in Unity's hierarchy window. Just add the package to your project, and that's all; no further steps required. "),n("b",[e._v("The project is free and open source.")]),e._v(" You can find the source code and further details in the "),n("Hyperlink",{attrs:{to:e.metadata.project.identity.externalProjectUrl}},[e._v("project repository")]),e._v(".\n ")],1),e._v(" "),n("p",[n("b",[e._v("Motivation:")]),e._v(" Unity's hierarchy tree doesn't render any edges by default, which makes it hard to understand the depth of the nodes and the parent-child relationships between them. This really bothered me; the hierarchy view just felt incomplete. So I decided to implement this feature myself. The package renders the tree and highlights the subgraph of selected nodes.\n ")]),e._v(" "),n("p",[e._v("\n Here, I want to share this small package with you. I think it's one of the few packages I add to almost every project I work on. I hope it helps you to improve your editor, and it makes you as happy as it makes me when I interact with the hierarchy. :)\n ")]),e._v(" "),n("p",[n("b",[e._v("Install the Package:")]),e._v(" If you want to have a tree view in your hierarchy, then you just have to add the package to your project. That's all. You can find instructions on how to install the package in the "),n("Hyperlink",{attrs:{to:e.metadata.project.identity.externalProjectUrl}},[e._v("project repository")]),e._v(".\n ")],1),e._v(" "),n("p",[n("b",[e._v("Support & Contribute:")]),e._v(" If you want to support me and my projects, you can follow me on "),n("GitHubLink"),e._v(". Just come by and say hello. I would love to hear how you are using this project. If you want to contribute to this project, you are welcome to do so. "),n("Hyperlink",{attrs:{to:"/contact"}},[e._v("Leave me a message")]),e._v(" and we will find a way to collaborate.\n ")],1)]),e._v(" "),n("WindowElement",{attrs:{"media-metadata":[e.metadata.project.promotion.reel],title:"Impressions","hide-divider-in-feed":""}})],1)],1)}),[],!1,null,null,null);t.default=component.exports;installComponents(component,{Hyperlink:n(63).default,GitHubLink:n(217).default,PaperPatch:n(357).default,WindowElement:n(356).default,PaperPage:n(354).default,SimpleProjectLayout:n(370).default})},function(e,t,n){"use strict";n.r(t),n.d(t,"metadata",(function(){return r}));var r={project:{identity:{title:"Song of Endrak",shortDescription:"A location-based online game from 2014.",subdirectory:"song-of-endrak"},preview:{detailed:{}},promotion:{icon:{source:n(664)},gallery:{items:[{source:n(665),alt:'A screenshot of the game "Song of Endrak".',thumbnail:{source:n(666),alt:""},type:"image",title:'A screenshot of the game "Song of Endrak"',year:2014,caption:""},{source:n(667),alt:'A screenshot of the game "Song of Endrak".',thumbnail:{source:n(668),alt:""},type:"image",title:'A screenshot of the game "Song of Endrak"',year:2014,caption:""},{source:n(669),alt:'A screenshot of the game "Song of Endrak".',thumbnail:{source:n(670),alt:""},type:"image",title:'A screenshot of the game "Song of Endrak"',year:2014,caption:""},{source:n(671),alt:'A screenshot of the game "Song of Endrak".',thumbnail:{source:n(672),alt:""},type:"image",title:'A screenshot of the game "Song of Endrak"',year:2014,caption:""},{source:n(673),alt:'A screenshot of the game "Song of Endrak".',thumbnail:{source:n(674),alt:""},type:"image",title:'A screenshot of the game "Song of Endrak"',year:2014,caption:""}]}},categories:{values:["games"]},types:{values:["game"]},history:{in:{date:{year:2014}}}}},o={name:"SongOfEndrak",layout:"default",created:function(){this.metadata=r}},l=n(2),component=Object(l.a)(o,(function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("SimpleProjectLayout",{attrs:{metadata:e.metadata}},[n("PaperPage",{attrs:{"use-with-paper-patches":""}},[n("PaperPatch",[n("p",[e._v('\n "Song of Endrak" is a location-based strategy game for mobile platforms from 2014. The game was developed for the lecture "Social Gaming" at the university.\n ')]),e._v(" "),n("p",[n("b",[e._v("The Idea:")]),e._v(" The game was inspired by the idea of merging location-based games like Ingress with strategy games like Heroes of Might and Magic III. (We played a lot of Ingress during that time.) We wanted to combine the strategic depth of the turn-based classics with the social experience of a location-based multiplayer gameâall within the context of the real world. So instead of controlling an avatar in a virtual world, you explore the real world together with friends, conquering territories, and engaging in epic adventures.\n ")]),e._v(" "),n("p",[n("b",[e._v("Gameplay:")]),e._v(" The game loop is quite simple. You start with your own city and recruit armies to join your mission. You can expand your city with resources to recruit more powerful creatures. After joining a faction, you travel through the lands to expand your territory. The game world is covered with locations you can conquer to loot resources and give yourself a strategic advantage.\n In order to conquer a specific location, you'll take part in battles that will demand all your strategic talent. The game has a turn-based combat system based on different unit types and battlefield variations, with an emphasis on simple mechanics that offer profound strategic possibilities.\n ")]),e._v(" "),n("p",[n("b",[e._v("Real World:")]),e._v(" All activities on the game map are based on your real-world location. The in-game locations are based on special real-world places, such as famous landmarks, statues, gas stations, or city parks. In addition, real-world conditions such as weather and daytime influence the battles. Together with friends, you form alliances to conquer your virtual neighborhood for your faction.\n ")])]),e._v(" "),n("WindowElement",{attrs:{"media-metadata":e.metadata.project.promotion.gallery.items,title:"Impressions","hide-divider-in-feed":""}})],1)],1)}),[],!1,null,null,null);t.default=component.exports;installComponents(component,{PaperPatch:n(357).default,WindowElement:n(356).default,PaperPage:n(354).default,SimpleProjectLayout:n(370).default})},function(e,t,n){"use strict";n.r(t),n.d(t,"metadata",(function(){return r}));var r={project:{identity:{title:"Course: Introduction to Audio for Games",shortDe
1scription:"A course at the university.",subdirectory:"teaching/introduction-to-audio-for-games"},categories:{values:["science","games","design"]},history:{from:{date:{year:2016}},to:{today:!0}}}},o={name:"IntroductionToAudioForGames",layout:"default",created:function(){this.metadata=r}},l=n(2),component=Object(l.a)(o,(function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("SimpleScrollingLayout",{attrs:{metadata:e.metadata}},[n("TextBlock",{class:[]},[n("p",[e._v('\n "Introduction to Audio for Games" is a practical course for undergraduate game engineering students. During the course, we explore the topics of sound effects, game music, and audio systems in game engines.\n ')]),e._v(" "),n("p",[n("span",{staticClass:"paragraph-title"},[e._v("Motivation:")]),e._v(" When we realized that most of our students' projects were missing audio features, we figured we had to do something about it. We decided to create a new course that would teach students about the importance of audio to the gaming experience. Together with Dana and Nicole, we developed the new audio course. Later, Sven joined us.\n ")]),e._v(" "),n("p",[n("span",{staticClass:"paragraph-title"},[e._v("Concept:")]),e._v(" The concept of the course is simple: we want to explore many important audio perspectives: Foley art, sound effects, composition, and technical implementations. Although some of these topics are only indirectly relevant to engineers, we feel it is very important to gain experience with them. To better understand the composers and sound designers they will later work with, it is best to slip into their roles once. Being a composer and sound designer for a few weeks will help them become better audio engineers.\n ")]),e._v(" "),n("p",[n("span",{staticClass:"paragraph-title"},[e._v("Structure:")]),e._v(" The course consists of three big blocks with individual assignments and a project phase at the end of the semester. The three blocks are Foley art, composing, and game engines. After the students have experienced the roles of Foley artists and composers in the first two blocks, we introduce all the important audio features that common game engines have. In the subsequent project phase, students will develop a game with a focus on audio features. This can be a technical challenge or a specific gameplay feature that has to do with audio. In this project phase, students can decide whether they want to develop their own audio system or gain experience with typical audio middleware. For the project, they can again contribute their experience as Foley artists and composers.\n ")]),e._v(" "),n("p",[n("span",{staticClass:"paragraph-title"},[e._v("Further Reading:")]),e._v(" If you want to step into the role of composer yourself, check out this great tutorial series at "),n("Hyperlink",{attrs:{to:"https://learningmusic.ableton.com/"}},[e._v("learningmusic.ableton.com")]),e._v(".\n ")],1)])],1)}),[],!1,null,"a450828c",null);t.default=component.exports;installComponents(component,{Hyperlink:n(63).default,TextBlock:n(355).default,SimpleScrollingLayout:n(368).default})},function(e,t,n){"use strict";n.r(t),n.d(t,"metadata",(function(){return r}));var r={project:{identity:{title:"Course: 3D User Interfaces",shortDescription:"A lecture at the university.",subdirectory:"teaching/3d-user-interfaces"},categories:{values:["science","design"]},history:{from:{date:{year:2020}},to:{today:!0}}}},o={name:"IntroductionToAudioForGames",layout:"default",created:function(){this.metadata=r}},l=n(2),component=Object(l.a)(o,(function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("SimpleScrollingLayout",{attrs:{metadata:e.metadata}},[n("TextBlock",{class:[]},[n("p",[e._v('\n "3D User Interfaces" is a course on three-dimensional human-computer interaction aimed at master\'s students. The course consists of a lecture and an exercise course. The lecture is taught by Prof. Gudrun Klinker. As an exercise instructor, I am responsible for the exercise course.\n ')]),e._v(" "),n("p",[n("span",{staticClass:"paragraph-title"},[e._v("Lecture:")]),e._v(" The lecture provides in-depth coverage of concepts of three-dimensional human-computer interaction including topics such as current input and output devices, interaction techniques (selection, manipulation, travel, wayfinding, system control), evaluation of 3D user interfaces, and future 3D user interfaces.\n ")]),e._v(" "),n("p",[n("span",{staticClass:"paragraph-title"},[e._v("Exercise Course:")]),e._v("\n The purpose of the exercise course is to provide insights into real-world problems and s
1olutions related to the topics taught in the lecture. In the exercises, we explore practical applications in the context of games and interactive applications. Each week we have an exercise course in which we teach the practical basics. Students will then be able to implement small exercises related to the topics explained. The exercises are implemented using the Unity Game Engine and web technologies.\n ")]),e._v(" "),n("p",[e._v("\n During this course, we explore event-based architectures for processing input, from simple event handling for decoupling input to more powerful programming paradigms such as reactive programming. To get started, students explore classic event handling and basic pointer input in the context of the game "),n("Hyperlink",{attrs:{to:"/ohi-ohi-dungeon"}},[e._v("Ohi Ohi Dungeon")]),e._v(". In the second week, we introduce reactive programming and compare the approaches with the naive implementations from the first week. In the following weeks, students implement a "),n("Hyperlink",{attrs:{to:"/first-person-controller-for-unity"}},[e._v("first-person controller")]),e._v(" with travel and camera controls using Reactive Programming. Later, the students implement wayfinding support techniques for this first-person controller. In the second part of the semester, students apply various selection and manipulation techniques through a variety of exercises. This includes an exercise in the context of "),n("Hyperlink",{attrs:{to:"https://github.com/SandroWeber/ubi-interact"}},[e._v("Ubi Interact")]),e._v(" to get to know another framework for complex interactions. At the end of the semester, students can participate in a project phase in which they work on interesting research questions related to one of the topics taught during the semester. For this project, students implement a prototype related to 3D user interfaces and conduct a UI evaluation in the form of user studies.\n ")],1),e._v(" "),n("p",[n("span",{staticClass:"paragraph-title"},[e._v("Further Reading:")]),e._v(" If you want to learn more about 3D User Interfaces, read the book "),n("Hyperlink",{attrs:{to:"https://opac.ub.tum.de/TouchPoint/perma.do?q=+1035%3D%22BV043991844%22+IN+%5B2%5D&v=tum&l=de"}},[e._v('"3D User Interfaces: Theory and Practice"')]),e._v(" by LaViola et al. (2017). If you want to learn more about Reactive Programming, check out "),n("Hyperlink",{attrs:{to:"https://gist.github.com/staltz/868e7e9bc2a7b8c1f754"}},[e._v('"The introduction to Reactive Programming you\'ve been missing"')]),e._v("by André Staltz (2014), concrete frameworks such as "),n("Hyperlink",{attrs:{to:"http://reactivex.io/"}},[e._v("ReactiveX")]),e._v(", and solutions for Unity such as "),n("Hyperlink",{attrs:{to:"https://github.com/neuecc/UniRx"}},[e._v("UniRx")]),e._v(".\n ")],1)])],1)}),[],!1,null,"3b93b4d6",null);t.default=component.exports;installComponents(component,{Hyperlink:n(63).default,TextBlock:n(355).default,SimpleScrollingLayout:n(368).default})},function(e,t,n){"use strict";n.r(t),n.d(t,"metadata",(function(){return r}));var r={project:{identity:{title:"Seminar: Game Analysis",shortDescription:"A seminar at the university.",subdirectory:"teaching/game-analysis"},categories:{values:["science","games"]},history:{from:{date:{year:2020}},to:{today:!0}}}},o={name:"IntroductionToAudioForGames",layout:"default",created:function(){this.metadata=r}},l=n(2),component=Object(l.a)(o,(function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("SimpleScrollingLayout",{attrs:{metadata:e.metadata}},[n("TextBlock",{class:[]},[n("p",[e._v("\n As part of my teaching responsibilities, I am involved in the Game Analysis seminar. The goal of the Game Analysis seminar is to give students the ability to analyze characteristics of games both on an individual basis and in comparison with other games. Game analysis includes topics such as game genres, advances in game mechanics, the evolution of design engineering processes, and so on. As a rule, I try to focus on topics related to the development process of games and combine these topics with the principles of game analysis. Starting with hands-on game experiences, students continue background research on games and conclude with an in-depth analysis. During the semester, students create an analysis and give a presentation.\n ")]),e._v(" "),n("p",[e._v("\n Over the past few years, I have mentored many students. Here you can find a list of papers from the previous years:\n ")]),e._v(" "),n("GameAnalysisSeminarProjects")],1)],1)}),[],!1,null,"2faa4b46",null);t.default=component.exports;installComponents(component,{GameAnalysisSeminarProjects:n(508).default,TextBlock:n(355).default,SimpleScrollingLayout:n(368).default})},function(e,t,n){"use strict";n.r(t),n.d(t,"metadata",(function(){return r}));var r={project:{identity:{title:"Course: Interaction Methods and Devices",shortDe
1scription:"A lecture at the university.",subdirectory:"teaching/interaction-methods-and-devices"},categories:{values:["science"]},history:{from:{date:{year:2019}},to:{today:!0}}}},o={name:"IntroductionToAudioForGames",layout:"default",created:function(){this.metadata=r}},l=n(2),component=Object(l.a)(o,(function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("SimpleScrollingLayout",{attrs:{metadata:e.metadata}},[n("TextBlock",{class:[]},[n("p",[e._v('\n "Interaction Methods and Devices" is a course on human-computer interaction for undergraduate game engineering students. The course consists of a lecture, an exercise course, and tutorials. Prof. Gudrun Klinker teaches the lecture. As an exercise instructor, I am responsible for the exercises. The tutorials are taught by student tutors.\n ')]),e._v(" "),n("p",[n("span",{staticClass:"paragraph-title"},[e._v("Lecture:")]),e._v(" The lecture provides an in-depth coverage of concepts and devices for human computer interaction in the context of computer games. This includes topics such as current input and output devices and methods, technical details of selected input and output methods, interaction metaphors for computer games and their respective suitability, and evaluation of game interactions.\n ")]),e._v(" "),n("p",[n("span",{staticClass:"paragraph-title"},[e._v("Exercise Course:")]),e._v("\n The purpose of the exercise course is to bridge the gap between theoretical knowledge and practical applications. We want to provide insights into real-world problems and solutions related to the topics taught in the lecture. Each week we have an exercise course in which we teach the practical basics. Students then attend tutorials where they perform small exercises in the context of games. The exercises are implemented using the Unity Game Engine and web technologies.\n ")]),e._v(" "),n("p",[e._v("\n During this course, we explore event-based architectures for processing input, from simple event handling for decoupling input to more powerful programming paradigms, such as reactive programming. To get started, students explore classic event handling and basic pointer input in the context of the game "),n("Hyperlink",{attrs:{to:"/ohi-ohi-dungeon"}},[e._v("Ohi Ohi Dungeon")]),e._v(". In the second week, we introduce reactive programming and compare the approaches with the naive implementations from the first week. In the following weeks, students implement a "),n("Hyperlink",{attrs:{to:"/first-person-controller-for-unity"}},[e._v("first-person controller")]),e._v(" with travel and camera controls using Reactive Programming. Later, the students implement wayfinding support techniques for this first-person controller. In the second part of the semester, students implement various interaction techniques, digital input devices (including a virtual controller and a "),n("Hyperlink",{attrs:{to:"/virtual-ocarina"}},[e._v("Virtual Ocarina")]),e._v("), and multiple applications with various input and output modalities (including a "),n("Hyperlink",{attrs:{to:"/marble-maze"}},[e._v("Marble Game")]),e._v(" and a "),n("Hyperlink",{attrs:{to:"/guess-the-distance"}},[e._v("GPS Game")]),e._v(".) At the end of the semester, students can participate in a project phase in which they work on interesting research questions related to the topics taught during the semester. For this project, students implement a prototype related to interaction methods and conduct a UI evaluation in the form of user studies.\n ")],1),e._v(" "),n("p",[n("span",{staticClass:"paragraph-title"},[e._v("Further Reading:")]),e._v(" If you want to learn more about interaction methods, read the book "),n("Hyperlink",{attrs:{to:"https://opac.ub.tum.de/TouchPoint/perma.do?q=+1035%3D%22BV043991844%22+IN+%5B2%5D&v=tum&l=de"}},[e._v('"3D User Interfaces: Theory and Practice"')]),e._v(" by LaViola et al. (2017). If you want to learn more about Reactive Programming, check out "),n("Hyperlink",{attrs:{to:"https://gist.github.com/staltz/868e7e9bc2a7b8c1f754"}},[e._v('"The introduction to Reactive Programming you\'ve been missing"')]),e._v("by André Staltz (2
1014), concrete frameworks such as "),n("Hyperlink",{attrs:{to:"http://reactivex.io/"}},[e._v("ReactiveX")]),e._v(", and solutions for Unity such as "),n("Hyperlink",{attrs:{to:"https://github.com/neuecc/UniRx"}},[e._v("UniRx")]),e._v(".\n ")],1)])],1)}),[],!1,null,"7a8b0010",null);t.default=component.exports;installComponents(component,{Hyperlink:n(63).default,TextBlock:n(355).default,SimpleScrollingLayout:n(368).default})},function(e,t,n){"use strict";n.r(t),n.d(t,"metadata",(function(){return r}));var r={project:{identity:{title:"Course: Level Engineering",shortDescription:"A course at the university.",subdirectory:"teaching/level-engineering"},categories:{values:["science"]},history:{from:{date:{year:2021}},to:{today:!0}}}},o={name:"IntroductionToAudioForGames",layout:"default",created:function(){this.metadata=r}},l=n(2),component=Object(l.a)(o,(function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("SimpleScrollingLayout",{attrs:{metadata:e.metadata}},[n("TextBlock",{class:[]},[n("p",[e._v('\n "Level Engineering: Methods and Tools for Creating Game Environments and Level Design" is a practical course for game engineering students. The first time I taught the course was in 2021 at TUM. In this course, we explore the process of creating gamespaces and virtual environments in games. The motivation to develop this course was a topic for my doctoral studies. I wanted to get a sense of the design engineering process of gamespaces. And the easiest way to immerse yourself in a topic and understand it is to teach it.\n ')]),e._v(" "),n("p",[n("span",{staticClass:"paragraph-title"},[e._v("Purpose:")]),e._v("\n The purpose of this course is to bridge the gap between theoretical knowledge and practical applications: What is the relation of theoretical foundations and practical development? For me, this means I try to include many practical examples and examples from actual games. For the students, this means that they will gain experience by applying many processes and aspects in their assignments.\n ")]),e._v(" "),n("p",[n("span",{staticClass:"paragraph-title"},[e._v("Structure:")]),e._v(" In a weekly practical course, I teach basics and important concepts and try to show their application in practice. Students then explore the topics in individual assignments. In the second part of the semester, students deepen their understanding of these concepts in a group project in which they develop a game.\n ")]),e._v(" "),n("p",[n("span",{staticClass:"paragraph-title"},[e._v("Content:")]),e._v(" In this course, we focus on the systematic application of engineering approaches to the development of gamespaces and game environments. Students learn the basics of level design and 3D user interfaces. Using specific examples from industry-standard game projects, students engage with engineering methods and tools for designing and developing gamespaces for computer games. Topics include:\n ")]),e._v(" "),n("ul",[n("li",[n("b",[e._v("An Introduction to Level Design")]),e._v(" including basic knowledge of the role of level design in the context of game development processes (especially with regard to interfaces with other aspects of games and areas of game development), pacing, and gamespaces.\n ")]),e._v(" "),n("li",[n("b",[e._v("Advanced Topics of Level Design")]),e._v(" including topics such as wayfinding, design principles for game environments (learning, emotional design, storytelling, reward, choice), and the balance between aesthetic design, gameplay, and performance.\n ")]),e._v(" "),n("li",[n("b",[e._v("3D user interfaces")]),e._v(" including the fundamentals of 3D user interfaces in the context of game environments with focus on the relationship between level design and classic 3D user interfaces (travel techniques, camera control, wayfinding, etc.)\n ")]),e._v(" "),n("li",[n("b",[e._v("Level Engineering methods and tools")]),e._v(" including topics such as documents in game development, planning, and prototyping.\n ")]),e._v(" "),n("li",[n("b",[e._v("Tool Engineering")]),e._v(" including an introduction to tool engineering for game engines and the development and application of complex software and tools to support the design and development process.\n ")])]),e._v(" "),n("p",[n("span",{staticClass:"paragraph-title"},[e._v("Further Reading:")]),e._v("\n If you want to read more about the design engineering process of gamespaces, level design, and user interfaces, here are a few resources worth checking out: "),n("Hyperlink",{attrs:{to:"https://opac.ub.tum.de/TouchPoint/perma.do?q=+1035%3D%22BV046277895%22+IN+%5B2%5D&v=tum&l=de"}},[e._v('"The Art of Game Design: A Book of Lenses"')]),e._v(" by Schell (2019), "),n("Hyperlink",{attrs:{to:"https://opac.ub.tum.de/TouchPoint/perma.do?q=+0%3D%22ZDB-30-ORH-047598867%22+IN+%5B2%5D&v=tum&l=de"}},[e._v('"An Architectural Approach to Level Design"')]),e._v(" by Totten (2018), and "),n("Hyperlink",{attrs:{to:"https://opac.ub.tum.de/TouchPoint/perma.do?q=+1035%3D%22BV043991844%22+IN+%5B2%5D&v=tum&l=de"}},[e._v('"3D User Interfaces: Theory and Practice"')]),e._v(" by LaViola et al. (2017).\n ")],1),e._v(" "),n("p",[n("span",{staticClass:"paragraph-title"},[e._v("Course Projects:")]),e._v("\n I am very proud of the incredible projects created by students in my courses. Below are a few honorable mentions:\n ")]),e._v(" "),n("ul",[n("li",[n("b",[e._v("Off Course:")]),e._v(" This project was developed across two of my practical courses,\n "),n("Hyperlink",{attrs:{to:"/teaching/level-engineering"}},[e._v("Level Engineering")]),e._v(" and\n "),n("Hyperlink",{attrs:{to:"/teaching/immersive-storytelling-games"}},[e._v("Immersive Storytelling: Games")]),e._v(".\n You can find more information on the\n "),n("Hyperlink",{attrs:{to:"https://store.steampowered.com/app/3886730/Off_Course/"}},[e._v("Steam Page")]),e._v(".\n ")],1),e._v(" "),n("li",[n("b",[e._v("Oku:")]),e._v(" Originally developed as a prototype by "),n("Hyperlink",{attrs:{to:"https://www.linkedin.com/in/claudio-belloni-762717309/"}},[e._v("Claudio Belloni")]),e._v(" during his masterâs practical course in "),n("Hyperlink",{attrs:{to:"/teaching/level-engineering"}},[e._v("Level Engineering")]),e._v(", the project was later discovered by "),n("Hyperlink",{attrs:{to:"https://irox-games.com/"}},[e._v("Irox Games")]),e._v(", which is now developing the full game. More information is available on its\n "),n("Hyperlink",{attrs:{to:"https://store.steampowered.com/app/3590650/OKU/",target:"_blank",rel:"noopener noreferrer"}}
1,[e._v("Steam page")]),e._v(".\n ")],1)])])],1)}),[],!1,null,"2769d869",null);t.default=component.exports;installComponents(component,{Hyperlink:n(63).default,TextBlock:n(355).default,SimpleScrollingLayout:n(368).default})},function(e,t,n){"use strict";n.r(t),n.d(t,"metadata",(function(){return r}));var r={project:{identity:{title:"Course: Immersive Storytelling: Games",shortDescription:"A course at the university.",subdirectory:"teaching/immersive-storytelling-games"},categories:{values:["science"]},history:{from:{date:{year:2024}},to:{today:!0}}}},o={name:"ImmersiveStorytellingGames",layout:"default",created:function(){this.metadata=r}},l=n(2),component=Object(l.a)(o,(function(){var e=this,t=e.$createElement,r=e._self._c||t;return r("SimpleScrollingLayout",{attrs:{metadata:e.metadata}},[r("TextBlock",{class:[]},[r("p",[e._v('\n "Immersive Storytelling: Games" is a collaborative semester project offered by the '),r("Hyperlink",{attrs:{to:"https://www.hff-muenchen.de/"}},[e._v("Hochschule für Fernsehen und Film (HFF) Munich")]),e._v(" and the "),r("Hyperlink",{attrs:{to:"https://www.tum.de/"}},[e._v("Technische Universität München (TUM)")]),e._v(". The course is designed to unite students from both institutions to develop video game prototypes.\n ")],1),e._v(" "),r("p",[e._v("\n The course is divided into two main parts: a concept phase and a development phase. In a 2.5 weeks block seminar, students are introduced to the fundamentals of narrative and game design through lectures and practical exercises. Teams are formed in the second week, focusing on morning sessions covering various aspects of the gaming industry and afternoon sessions dedicated to developing concepts for the prototypes. The theory phase concludes with the presentation and discussion of these concepts and the creation of a roadmap for each project.\n ")]),e._v(" "),r("p",[e._v("\n Over the following five months, students work on developing their prototypes as per the established roadmaps. They maintain the same team configurations throughout the semester and receive guidance from both content and technical mentors. The course includes regular checkpoint meetings to review progress and networking events featuring speakers from the game industry. Over the semester, students from HFF have the unique opportunity to work towards their technical degree through active participation in this course. The semester concludes with a presentation of the prototypes, which students can opt to showcase at a local indie game developers meeting.\n ")]),e._v(" "),r("p",[e._v("\n This course offers an exceptional opportunity for students to engage deeply in creative game development, leveraging interdisciplinary collaboration and industry insights to produce innovative game experiences.\n ")]),e._v(" "),r("p",[r("span",{staticClass:"paragraph-title"},[e._v("Course Projects:")]),e._v("\n I am very proud of the incredible projects created by students in my courses. Below are a few honorable mentions:\n ")]),e._v(" "),r("ul",[r("li",[r("b",[e._v("Thomas Ireham in Crimson Spotlight:")]),e._v(" The first iteration of this project was developed in the context of\n "),r("Hyperlink",{attrs:{to:"/teaching/immersive-storytelling-games"}},[e._v("Immersive Storytelling: Games")]),e._v(" and subsequently further continued. You can find more information on the\n "),r("Hyperlink",{attrs:{to:"https://store.steampowered.com/app/4176940/Thomas_Ireham_in_Crimson_Spotlight/"}},[e._v("Steam Page")]),e._v(".\n ")],1),e._v(" "),r("li",[r("b",[e._v("Off Course:")]),e._v(" This project was developed across two of my practical courses,\n "),r("Hyperlink",{attrs:{to:"/teaching/level-engineering"}},[e._v("Level Engineering")]),e._v(" and\n "),r("Hyperlink",{attrs:{to:"/teaching/immersive-storytelling-games"}},[e._v("Immersive Storytelling: Games")]),e._v(".\n You can find more information on the\n "),r("Hyperlink",{attrs:{to:"https://store.steampowered.com/app/3886730/Off_Course/"}},[e._v("Steam Page")]),e._v(".\n ")],1),e._v(" "),r("li",[r("b",[e._v("The Daily Truth:")]),e._v(" This project was developed in the context of\n "),r("Hyperlink",{attrs:{to:"/teaching/immersive-storytelling-games"}},[e._v("Immersive Storytelling: Games")]),e._v(".\n You can find more information on the\n "),r("Hyperlink",{attrs:{to:"https://the-fifth-king.itch.io/the-daily-truth"}},[e._v("Itch.io Page")]),e._v(".\n ")],1),e._v(" "),r("li",[r("b",[e._v("Forgotten Colors:")]),e._v(" This project was developed in the context of\n "),r("Hyperlink",{attrs:{to:"/teaching/immersive-storytelling-games"}},[e._v("Immersive Storytelling: Games")]),e._v(". You can find more information on their\
1n "),r("Hyperlink",{attrs:{to:"https://felipe-lucas.itch.io/forgotten-colors"}},[e._v("Itch.io Page")]),e._v(".\n ")],1)]),e._v(" "),r("br"),e._v(" "),r("MediaVessel",{attrs:{items:[{source:n(550),fallbackSource:n(550),type:"image",title:"Project Impressions 2024",year:"2024",caption:"Posters created by students in the course Immersive Storytelling: Games. Credits belong to the respective creators."}],"use-hover-information":"","hide-baked-signature":!1,"hide-signature":!0,"thumbnail-container-aspect-ratio":"landscape"}}),e._v(" "),r("br"),e._v(" "),r("MediaVessel",{attrs:{items:[{source:n(551),fallbackSource:n(551),type:"image",title:"Project Impressions 2025",year:"2025",caption:"Posters created by students in the course Immersive Storytelling: Games. Credits belong to the respective creators."}],"use-hover-information":"","hide-baked-signature":!1,"hide-signature":!0,"thumbnail-container-aspect-ratio":"landscape"}})],1)],1)}),[],!1,null,"44506eaf",null);t.default=component.exports;installComponents(component,{Hyperlink:n(63).default,MediaVessel:n(394).default,TextBlock:n(355).default,SimpleScrollingLayout:n(368).default})},function(e,t,n){"use strict";n.r(t),n.d(t,"metadata",(function(){return r}));var r={project:{identity:{title:"Master Lab Course",shortDescription:"A course at the university.",subdirectory:"teaching/master-lab-course"},categories:{values:["science"]},history:{from:{date:{year:2021}},to:{today:!0}}}},o={name:"IntroductionToAudioForGames",layout:"default",created:function(){this.metadata=r}},l=n(2),component=Object(l.a)(o,(function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("SimpleScrollingLayout",{attrs:{metadata:e.metadata}},[n("TextBlock",{class:[]},[n("p",[e._v("\n As part of my teaching, I supervise practical master lab courses. In these courses, a team of three or four students develops a game project that encompasses all relevant aspects of game development, from audio features to visual effects to gameplay systems. To make things even more exciting, we always set an interesting context to focus on for the project. This might be a particular technical challenge, such as working with specialized hardware, or an interesting design problem, such as focusing on sophisticated character controllers for 2D platformers. These topics are usually related to my other courses or research interests. For example, on one project we wanted to focus on gamespaces, level design, and the corresponding design engineering processes. On another project, we wanted to use photogrammetry assets, so we focused on the workflow around those types of assets. Anything that fits within the scope of the course is possible.\n ")]),e._v(" "),n("p",[e._v("\n Here you will find a partial list featuring impressions of projects from previous years:\n ")]),e._v(" "),n("MasterLabCourseProjectList"),e._v(" "),n("p",{staticClass:"subtle"},[e._v("\n If you are a games engineering student at TUM and you are interested in a practical master lab course, check out my "),n("Hyperlink",{attrs:{to:"/collaborate"}},[e._v("Collaborate")]),e._v(" page and write to me about your idea.\n ")],1)],1)],1)}),[],!1,null,"7422f40c",null);t.default=component.exports;installComponents(component,{MasterLabCourseProjectList:n(509).default,Hyperlink:n(63).default,TextBlock:n(355).default,SimpleScrollingLayout:n(368).default})},function(e,t,n){"use strict";n.r(t),n.d(t,"metadata",(function(){return o}));var r=n(387),o={project:{identity:{title:"syn chr ony",shortDescription:"A collection of photographs from 2020.",subdirectory:"syn-chr-ony"},promotion:{icon:{source:n(675)}},preview:{detailed:{}},categories:{values:["art"]},types:{values:["Photography"]},history:{in:{date:{year:2020,month:6}}}}},l={name:"Index",components:{ArtGalleryProjectLayout:r.default},layout:"default",data:function(){return{galleryItems:[{source:n(676),alt:"",type:"image",thumbnail:{source:n(677),alt:""},title:"syn chr ony â i",caption:".",credit:{label:"Daniel Dyrda"},year:2020},{source:n(678),alt:"",type:"image",thumbnail:{source:n(679),alt:""},title:"syn chr ony â ii",caption:".",credit:{label:"Daniel Dyrda"},year:2020},{source:n(680),alt:"",type:"image",thumbnail:{source:n(681),alt:""},title:"syn chr ony â iii",caption:".",credit:{label:"Daniel Dyrda"},year:2020},{source:n(552),alt:"",type:"image",thumbnail:{source:n(552),alt:""},title:"syn chr ony",caption:".",credit:{label:"Daniel Dyrda"},year:2020}]}},created:function(){this.metadata=o}},c=n(2),component=Object(c.a)(l,(function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("ArtGalleryProjectLayout",{attrs:{metadata:e.metadata,"gallery-items":e.galleryItems}},[n("PaperPage",{attrs:{"use-with-paper-patches":""}}
1,[n("PaperPatch",[n("p",[e._v("\n A set of photographs from 2020. Daniel Dyrda. Munich, Germany.\n ")]),e._v(" "),n("p",{staticClass:"subtle"},[e._v("\n â â â â â â â â â â â â â â â â â â â â â â ¼â â ¼â â ¼â â ¼â â ² â â â â â â â â ½â â â â ² â â ¥â â â â â â â â â â â ⠽⠲\n ")])]),e._v(" "),n("WindowElement",{attrs:{"media-metadata":e.galleryItems,"hide-baked-signature":"",title:"Gallery","hide-divider-in-feed":""}})],1)],1)}),[],!1,null,null,null);t.default=component.exports;installComponents(component,{PaperPatch:n(357).default,WindowElement:n(356).default,PaperPage:n(354).default,ArtGalleryProjectLayout:n(387).default})},function(e,t,n){"use strict";n.r(t),n.d(t,"metadata",(function(){return o}));var r=n(387),o={project:{identity:{title:"Siblings",shortDescription:"A pair of photographs from 2019.",subdirectory:"siblings"},promotion:{icon:{source:n(682)}},preview:{detailed:{}},categories:{values:["art"]},types:{values:["Photography"]},history:{in:{date:{year:2019}}}}},l={name:"Index",components:{ArtGalleryProjectLayout:r.default},layout:"default",data:function(){return{galleryItems:[{source:n(683),alt:"",type:"image",thumbnail:{source:n(684),alt:""},title:"Siblings â i",caption:".",credit:{label:"Daniel Dyrda"},year:2020},{source:n(685),alt:"",type:"image",thumbnail:{source:n(686),alt:""},title:"Siblings â ii",caption:".",credit:{label:"Daniel Dyrda"},year:2020},{source:n(553),alt:"",type:"image",thumbnail:{source:n(553),alt:""},title:"Siblings",caption:".",credit:{label:"Daniel Dyrda"},year:2020}]}},created:function(){this.metadata=o}},c=n(2),component=Object(c.a)(l,(function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("ArtGalleryProjectLayout",{attrs:{metadata:e.metadata,"gallery-items":e.galleryItems}},[n("PaperPage",{attrs:{"use-with-paper-patches":""}},[n("PaperPatch",[n("p",[e._v("\n Other perspectives. A pair of photographs. Berlin, Germany. Daniel Dyrda. 2019.\n ")]),e._v(" "),n("p",{staticClass:"subtle"},[e._v("\n â â â â â â â â â â â â â â â §â â â ² â â â â â â â â â â â â â â â â â â â ² â â â â â â â â â â â â â ⠽⠲ â â â â â â â â ½â â â â ² â ¼â â ¼â â ¼â â ¼â â ²\n ")])]),e._v(" "),n("WindowElement",{attrs:{"media-metadata":e.galleryItems,"hide-baked-signature":"",title:"Gallery","hide-divider-in-feed":""}})],1)],1)}),[],!1,null,null,null);t.default=component.exports;installComponents(component,{PaperPatch:n(357).default,WindowElement:n(356).default,PaperPage:n(354).default,ArtGalleryProjectLayout:n(387).default})},function(e,t,n){"use strict";n.r(t),n.d(t,"metadata",(function(){return o}));var r=n(387),o={project:{identity:{title:"Young Enough to Dream",shortDescription:"A pair of photographs from 2020.",subdirectory:"young-enough-to-dream"},promotion:{icon:{source:n(687)},reel:{source:n(688),fallbackSource:n(689),poster:n(690),type:"video"}},preview:{detailed:{}},categories:{values:["art"]},history:{in:{date:{year:2020}}}}},l={name:"Index",components:{ArtGalleryProjectLayout:r.default},layout:"default",data:function(){return{galleryItems:[{source:n(691),alt:"",type:"image",thumbnail:{source:n(692),alt:""},title:"Young enough to dream â i",caption:".",credit:{label:"Daniel Dyrda"},year:2020},{source:n(693),alt:"",type:"image",thumbnail:{source:n(694),alt:""},title:"Young enough to dream â ii",caption:".",credit:{label:"Daniel Dyrda"},year:2020},{source:n(554),alt:"",type:"image",thumbnail:{source:n(554),alt:""},title:"Young enough to dream",caption:".",credit:{label:"Daniel Dyrda"},year:2020}]}},created:function(){this.metadata=o}},c=n(2),component=Object(c.a)(l,(function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("ArtGalleryProjectLayout",{attrs:{metadata:e.metadata,"gallery-items":e.galleryItems}},[n("PaperPage",{attrs:{"use-with-paper-patches":""}},[n("PaperPatch",[n("p",[e._v("\n A pair of black and white photographs from 2020. Daniel Dyrda. Munich, Germany. Can I still dare to dream?\n ")]),e._v(" "),n("p",{staticClass:"subtle"},[e._v("\n â â â â â â â â â â â â
â â â â ºâ â â â â â â â â â â â â â â â â â â â ¼â â ¼â â ¼â â ¼â â ² â â â â â â â â ½â â â â ² â â ¥â â â â â â â â â â â ⠽⠲ â â â â â â â â â â â â â â â â â â â â â ¦\n ")])]),e._v(" "),n("WindowElement",{attrs:{"media-metadata":e.galleryItems,title:"Figures","hide-baked-signature":"","hide-divider-in-feed":""}})],1)],1)}),[],!1,null,null,null);t.default=component.exports;installComponents(component,{PaperPatch:n(357).default,WindowElement:n(356).default,PaperPage:n(354).default,ArtGalleryProjectLayout:n(387).default})},function(e,t,n){"use strict";n.r(t),n.d(t,"metadata",(function(){return o}
1));var r=n(387),o={project:{identity:{title:"Leila & Pepper",shortDescription:"A collection of photographs from 2021.",subdirectory:"leila-and-pepper"},promotion:{icon:{source:n(695)}},preview:{detailed:{}},categories:{values:["art"]},types:{values:["Photography"]},history:{in:{date:{year:2021}}}}},l={name:"Index",components:{ArtGalleryProjectLayout:r.default},layout:"default",data:function(){return{galleryItems:[{source:n(555),alt:"",type:"image",thumbnail:{source:n(555),alt:""},title:"Leila",caption:".",credit:{label:"Daniel Dyrda"},year:2020},{source:n(556),alt:"",type:"image",thumbnail:{source:n(556),alt:""},title:"Pepper",caption:".",credit:{label:"Daniel Dyrda"},year:2020}]}},created:function(){this.metadata=o}},c=n(2),component=Object(c.a)(l,(function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("ArtGalleryProjectLayout",{attrs:{metadata:e.metadata,"gallery-items":e.galleryItems}},[n("PaperPage",{attrs:{"use-with-paper-patches":""}},[n("PaperPatch",[n("p",[e._v("\n Photographs of Leila and Pepper from 2021. Daniel Dyrda. Germany.\n ")]),e._v(" "),n("p",{staticClass:"subtle"},[e._v("\n â â â â â â â â â â â â â â â â â â â â â â â â â â â â â â â â ¼â â ¼â â ¼â â ¼â â ² â â â â â â â â ½â â â â ² â â â â â â ⠽⠲\n ")])]),e._v(" "),n("WindowElement",{attrs:{"media-metadata":e.galleryItems,"hide-baked-signature":"",title:"Gallery","hide-divider-in-feed":""}})],1)],1)}),[],!1,null,null,null);t.default=component.exports;installComponents(component,{PaperPatch:n(357).default,WindowElement:n(356).default,PaperPage:n(354).default,ArtGalleryProjectLayout:n(387).default})},function(e,t,n){"use strict";n.r(t),n.d(t,"metadata",(function(){return o}));var r=n(387),o={project:{identity:{title:"Escape into Solitude",shortDescription:"A collection of photographs from 2020.",subdirectory:"escape-into-solitude"},promotion:{icon:{source:n(696)}},preview:{detailed:{}},categories:{values:["art"]},history:{in:{date:{year:2020,month:7}}}}},l={name:"Index",components:{ArtGalleryProjectLayout:r.default},layout:"default",data:function(){return{galleryItems:[{source:n(557),alt:"",type:"image",thumbnail:{source:n(557),alt:""},title:"Escape into Solitude â i",caption:".",credit:{label:"Daniel Dyrda"},year:2020},{source:n(558),alt:"",type:"image",thumbnail:{source:n(558),alt:""},title:"Escape into Solitude â ii",caption:".",credit:{label:"Daniel Dyrda"},year:2020},{source:n(559),alt:"",type:"image",thumbnail:{source:n(559),alt:""},title:"Escape into Solitude â iii",caption:".",credit:{label:"Daniel Dyrda"},year:2020},{source:n(560),alt:"",type:"image",thumbnail:{source:n(560),alt:""},title:"Escape into Solitude â iv",caption:".",credit:{label:"Daniel Dyrda"},year:2020},{source:n(561),alt:"",type:"image",thumbnail:{source:n(561),alt:""},title:"Escape into Solitude",caption:".",credit:{label:"Daniel Dyrda"},year:2020}]}},created:function(){this.metadata=o}},c=n(2),component=Object(c.a)(l,(function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("ArtGalleryProjectLayout",{attrs:{metadata:e.metadata,"gallery-items":e.galleryItems}},[n("PaperPage",{attrs:{"use-with-paper-patches":""}},[n("PaperPatch",[n("p",[e._v("\n A series of black and white photographs from 2020. Daniel Dyrda. Germany.\n ")]),e._v(" "),n("p",{staticClass:"subtle"},[e._v("\n â â â â â â â â â â â â â â
â â â â ºâ â â â â â â â â â â â â â â â â â â â ¼â â ¼â â ¼â â ¼â â ² â â â â â â â â ½â â â â ² â â â â â â ⠽⠲\n ")])]),e._v(" "),n("WindowElement",{attrs:{"media-metadata":e.galleryItems,"hide-baked-signature":"","hide-divider-in-feed":"",title:"Gallery"}})],1)],1)}),[],!1,null,null,null);t.default=component.exports;installComponents(component,{PaperPatch:n(357).default,WindowElement:n(356).default,PaperPage:n(354).default,ArtGalleryProjectLayout:n(387).default})},function(e,t,n){"use strict";n.r(t),n.d(t,"metadata",(function(){return o}
1));var r=n(387),o={project:{identity:{title:"Munich",shortDescription:"A collection of photographs.",subdirectory:"munich"},promotion:{icon:{source:n(697)}},preview:{detailed:{}},categories:{values:["art"]},types:{values:["Photography"]},history:{in:{date:{year:2020}}}}},l={name:"Index",components:{ArtGalleryProjectLayout:r.default},layout:"default",data:function(){return{galleryItems:[{source:n(698),alt:"",type:"image",thumbnail:{source:n(699),alt:""},title:"Munich",caption:".",credit:{label:"Daniel Dyrda"},year:2020}]}},created:function(){this.metadata=o}},c=n(2),component=Object(c.a)(l,(function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("ArtGalleryProjectLayout",{attrs:{metadata:e.metadata,"gallery-items":e.galleryItems}},[n("PaperPage",{attrs:{"use-with-paper-patches":""}},[n("PaperPatch",[n("p",[n("i",[e._v("Munich")]),e._v(" is an ongoing body of work documenting my view of my home town. Daniel Dyrda. Germany.\n ")]),e._v(" "),n("p",{staticClass:"subtle"},[e._v("\n â â ¥â â â â â â â â â â â â â â â â â â â ½ â â â ºâ â â
â â â â ¥â â â â â â â â â ½ â §â â â º â â â â ½ â â â â â â â ºâ â ² â â â â â â â â ½â â â â ² â â â â â â ⠽⠲\n ")])]),e._v(" "),n("WindowElement",{attrs:{"media-metadata":e.galleryItems,"hide-baked-signature":"",title:"Gallery","hide-divider-in-feed":""}})],1)],1)}),[],!1,null,null,null);t.default=component.exports;installComponents(component,{PaperPatch:n(357).default,WindowElement:n(356).default,PaperPage:n(354).default,ArtGalleryProjectLayout:n(387).default})},function(e,t,n){"use strict";n.r(t),n.d(t,"metadata",(function(){return o}));var r=n(387),o={project:{identity:{title:"Systems of Nature",shortDescription:"A collection of photographs.",subdirectory:"systems-of-nature"},promotion:{icon:{source:n(700)}},preview:{detailed:{}},categories:{values:["art"]},types:{values:["Photography"]},history:{from:{date:{year:2019}},to:{today:!0}}}},l={name:"Index",components:{ArtGalleryProjectLayout:r.default},layout:"default",data:function(){return{galleryItems:[{source:n(701),alt:"",type:"image",thumbnail:{source:n(702),alt:""},title:"Systems of Nature â i",caption:".",credit:{label:"Daniel Dyrda"},year:2020}]}},created:function(){this.metadata=o}},c=n(2),component=Object(c.a)(l,(function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("ArtGalleryProjectLayout",{attrs:{metadata:e.metadata,"gallery-items":e.galleryItems}},[n("PaperPage",{attrs:{"use-with-paper-patches":""}},[n("PaperPatch",[n("p",[e._v("\n An ongoing body of work exploring systems of nature. Daniel Dyrda. Munich, Germany.\n ")]),e._v(" "),n("p",{staticClass:"subtle"},[e._v("\n â â â â â â â â â â â â ½ â â â ºâ â â
â â â â â â â â â â â ½â â â â â â â â â â â ¥â â â ² â â â â â â â â ½â â â â ² â â ¥â â â â â â â â â â â ⠽⠲\n ")])]),e._v(" "),n("WindowElement",{attrs:{"media-metadata":e.galleryItems,"hide-baked-signature":"",title:"Gallery","hide-divider-in-feed":""}})],1)],1)}),[],!1,null,null,null);t.default=component.exports;installComponents(component,{PaperPatch:n(357).default,WindowElement:n(356).default,PaperPage:n(354).default,ArtGalleryProjectLayout:n(387).default})},function(e,t,n){"use strict";n.r(t),n.d(t,"metadata",(function(){return o}));var r=n(387),o={project:{identity:{title:"Spider and Bee",shortDescription:"A set of photographs from 2019.",subdirectory:"spider-and-bee"},promotion:{icon:{source:n(703)}},preview:{detailed:{}},categories:{values:["art"]},types:{values:["Photography"]},history:{in:{date:{year:2019}}}}},l={name:"Index",components:{ArtGalleryProjectLayout:r.default},layout:"default",data:function(){return{galleryItems:[{source:n(704),alt:"",type:"image",thumbnail:{source:n(705),alt:""},title:"Bee",caption:".",credit:{label:"Daniel Dyrda"},year:2020},{source:n(706),alt:"",type:"image",thumbnail:{source:n(707),alt:""},title:"Spider",caption:".",credit:{label:"Daniel Dyrda"},year:2020}]}},created:function(){this.metadata=o}},c=n(2),component=Object(c.a)(l,(function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("ArtGalleryProjectLayout",{attrs:{metadata:e.metadata,"gallery-items":e.galleryItems}},[n("PaperPage",{attrs:{"use-with-paper-patches":""}}
1,[n("PaperPatch",[n("p",[e._v("\n A set of photographs from 2019. Daniel Dyrda. Munich, Germany.\n ")]),e._v(" "),n("p",{staticClass:"subtle"},[e._v("\n â â â â â â â â â â â â â â â â â â â â â â ¼â â ¼â â ¼â â ¼â â ² â â â â â â â â ½â â â â ² â â ¥â â â â â â â â â â â ⠽⠲\n ")])]),e._v(" "),n("WindowElement",{attrs:{"media-metadata":e.galleryItems,"hide-baked-signature":"","hide-divider-in-feed":""}})],1)],1)}),[],!1,null,null,null);t.default=component.exports;installComponents(component,{PaperPatch:n(357).default,WindowElement:n(356).default,PaperPage:n(354).default,ArtGalleryProjectLayout:n(387).default})},function(e,t,n){"use strict";n.r(t),n.d(t,"metadata",(function(){return o}));var r=n(387),o={project:{identity:{title:"Origin",shortDescription:"My origin.",subdirectory:"origin"},promotion:{icon:{source:n(708)}},preview:{detailed:{}},categories:{values:["art"]},types:{values:["Photography"]},history:{in:{date:{year:2018}}}}},l={name:"Index",components:{ArtGalleryProjectLayout:r.default},layout:"default",data:function(){return{galleryItems:[{source:n(709),alt:"",type:"image",thumbnail:{source:n(710),alt:""},title:"Origin",caption:".",credit:{label:"Daniel Dyrda"},year:2018}]}},created:function(){this.metadata=o}},c=n(2),component=Object(c.a)(l,(function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("ArtGalleryProjectLayout",{attrs:{metadata:e.metadata,"gallery-items":e.galleryItems}},[n("PaperPage",{attrs:{"use-with-paper-patches":""}},[n("PaperPatch",[n("p",[e._v("\n The origin â my origin. Daniel Dyrda. Unknown place.\n ")]),e._v(" "),n("p",{staticClass:"subtle"},[e._v("\n â â â â â â â â â â ¤ â â ½ â â â â â â â ² â â â â â â â â ½â â â â ² â ¥â â
â â â ºâ â â â â â â ²\n ")])]),e._v(" "),n("WindowElement",{attrs:{"media-metadata":e.galleryItems,"hide-baked-signature":"",title:"","hide-divider-in-feed":""}})],1)],1)}),[],!1,null,null,null);t.default=component.exports;installComponents(component,{PaperPatch:n(357).default,WindowElement:n(356).default,PaperPage:n(354).default,ArtGalleryProjectLayout:n(387).default})},function(e,t,n){"use strict";n.r(t),n.d(t,"metadata",(function(){return o}));var r=n(387),o={project:{identity:{title:"Structure",shortDescription:"A collection of photographs.",subdirectory:"structure"},promotion:{icon:{source:n(711)}},preview:{detailed:{}},categories:{values:["art"]},types:{values:["Photography"]},history:{from:{date:{year:2019}},to:{today:!0}}}},l={name:"Index",components:{ArtGalleryProjectLayout:r.default},layout:"default",data:function(){return{galleryItems:[{source:n(712),alt:"",type:"image",thumbnail:{source:n(713),alt:""},title:"Structure",caption:".",credit:{label:"Daniel Dyrda"},year:2020}]}},created:function(){this.metadata=o}},c=n(2),component=Object(c.a)(l,(function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("ArtGalleryProjectLayout",{attrs:{metadata:e.metadata,"gallery-items":e.galleryItems}},[n("PaperPage",{attrs:{"use-with-paper-patches":""}},[n("PaperPatch",[n("p",[n("i",[e._v("Structure")]),e._v(" is an ongoing documentation of the inanimate.\n ")]),e._v(" "),n("p",{staticClass:"subtle"},[e._v("\n â â â â â â â â â â â ¥â â â ¥â â â â â â â â â â â â â â â â â ¥â â â â â â â â â â â â â â â â â â â â â â â â ² â â â â â â â â â ²\n ")])]),e._v(" "),n("WindowElement",{attrs:{"media-metadata":e.galleryItems,"hide-baked-signature":"",title:"Gallery","hide-divider-in-feed":""}})],1)],1)}),[],!1,null,null,null);t.default=component.exports;installComponents(component,{PaperPatch:n(357).default,WindowElement:n(356).default,PaperPage:n(354).default,ArtGalleryProjectLayout:n(387).default})},function(e,t,n){"use strict";n.r(t),n.d(t,"metadata",(function(){return o}));var r=n(387),o={project:{identity:{title:"Typewriting",shortDescription:"t y p e w r i t i n g .",subdirectory:"typewriting"},promotion:{icon:{source:n(714)}},preview:{detailed:{}},categories:{values:["art"]},types:{values:["Photography"]},history:{from:{date:{year:2019}},to:{today:!0}}}},l={name:"Index",components:{ArtGalleryProjectLayout:r.default},layout:"default",data:function(){return{galleryItems:[{source:n(715),alt:"",type:"image",thumbnail:{source:n(716),alt:""},title:"whowherewhen",caption:".",credit:{label:"Daniel Dyrda"},year:2020},{source:n(562),alt:"",type:"image",thumbnail:{source:n(562),alt:""},title:"whowherewhen",caption:".",credit:{label:"Daniel Dyrda"},year:2020},{source:n(563),alt:"",type:"image",thumbnail:{source:n(563),alt:""},title:"whowherewhen",caption:".",credit:{label:"Daniel Dyrda"},year:2020},{source:n(564),alt:"",type:"image",thumbnail:{source:n(564),alt:""},title:"whowherewhen",caption:".",credit:{label:"Daniel Dyrda"},year:2020},{source:n(565),alt:"",type:"image",thumbnail:{source:n(565),alt:""},title:"whowherewhen",caption:".",credit:{label:"Daniel Dyrda"},year:2020}]}},created:function(){this.metadata=o}},c=n(2),component=Object(c.a)(l,(function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("ArtGalleryProjectLayout",{attrs:{metadata:e.metadata,"gallery-items":e.galleryItems}},[n("PaperPage",{attrs:{"use-with-paper-patches":""}},[n("PaperPatch",[n("p",[e._v("\n _ am I _ ? â Drawing inspiration from the obsolete machine. Typewriter type. A tool to create word and picture. Unveiling a strange intimacy emerging from the artful interaction with technology. Being one with my inner conflict. A rebellion against both sides simultaneously: commercial technology and established art.\n ")]),e._v(" "),n("p",{staticClass:"subtle"},[e._v("\n _ â â â _ â ¦ â ¤ â â â â ºâ â â â â â â â â â â â â â â â â â â â â â â â â â â â â â â â â â â â â ² â â ½â â â ºâ â â â â â â ½â â â ² â â â â â â â â â â â â â â ºâ â â â â â â â â â â ¥â â â ² â ¥â â §â â â â â â â â â â â â â â â â â â â â â â ½ â â â â â â â â â â â â â â â â â â â â ¥â â â â â â â â â â â â â ºâ â â â â â â â â â â â ⠽⠲ â â â â â â â â â ºâ â â â â ½ â â â â â â â â â â â â â â ² â â â â â â â â â â â â â â â â â â â â â â â â â â â â â â ¥â â â â â â â ¥â â â ½â â â â â â â â â â â â â â â â â â â â â ½ â â â â â â â â â â â â â â â â â â ²\n ")])]),e._v(" "),n("WindowElement",{attrs:{"media-metadata":e.galleryItems,"hide-baked-signature":"","hide-divider-in-feed":""}})],1)],1)}),[],!1,null,null,null);t.default=component.exports;installComponents(component,{PaperPatch:n(357).default,WindowElement:n(356).default,PaperPage:n(354).default,ArtGalleryProjectLayout:n(387).default})},function(e,t,n){"use strict";n.r(t),n.d(t,"metadata",(function(){return o}
1));var r=n(387),o={project:{identity:{title:"Eye to eye",shortDescription:"A collection of photographs from 2021.",subdirectory:"eye-to-eye"},promotion:{icon:{source:n(717)}},preview:{detailed:{}},categories:{values:["art"]},history:{in:{date:{year:2021}}}}},l={name:"Index",components:{ArtGalleryProjectLayout:r.default},layout:"default",data:function(){return{galleryItems:[{source:n(718),alt:"",type:"image",thumbnail:{source:n(719),alt:""},title:"Eye",caption:".",credit:{label:"Daniel Dyrda"},year:2021},{source:n(720),alt:"",type:"image",thumbnail:{source:n(721),alt:""},title:"Fly",caption:".",credit:{label:"Daniel Dyrda"},year:2021},{source:n(722),alt:"",type:"image",thumbnail:{source:n(723),alt:""},title:"Eye in eye with the fly.",caption:".",credit:{label:"Daniel Dyrda"},year:2021}]}},created:function(){this.metadata=o}},c=n(2),component=Object(c.a)(l,(function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("ArtGalleryProjectLayout",{attrs:{metadata:e.metadata,"gallery-items":e.galleryItems}},[n("PaperPage",{attrs:{"use-with-paper-patches":""}},[n("PaperPatch",[n("p",[e._v("\n Eye to eye. A collection of photographs from 2021. Daniel Dyrda.\n ")]),e._v(" "),n("p",{staticClass:"subtle"},[e._v("\n â â ½â â â â â ½â â ² â â â â â â â â â â â â â â â â â â â â â â â â â â â â â ¼â â ¼â â ¼â â ¼â â ² â â â â â â â â ½â â â â ²\n ")])]),e._v(" "),n("WindowElement",{attrs:{"media-metadata":e.galleryItems,"hide-baked-signature":"","hide-divider-in-feed":"",title:"Gallery"}})],1)],1)}),[],!1,null,null,null);t.default=component.exports;installComponents(component,{PaperPatch:n(357).default,WindowElement:n(356).default,PaperPage:n(354).default,ArtGalleryProjectLayout:n(387).default})},function(e,t,n){"use strict";n.r(t),n.d(t,"metadata",(function(){return r}));var r={project:{pageIsProject:!0},page:{identity:{title:"Setup LaTeX and Markdown in Visual Studio Code",shortTitle:"Setup LaTeX and Markdown in Visual Studio Code",shortDescription:"A Step-by-Step Guide",subdirectory:"how-to/setup-latex-and-markdown-in-visual-studio-code"},abstract:{value:"Let's talk about my favorite way to write documents: a hybrid approach based on LaTeX and Markdown in Visual Studio Code. Why should we talk about it? Because writing documents is hard! And this setup makes it less hard! It combines the power of LaTeX with the simplicity of Markdown. And with VS Code, we even solve the problem of the terrible aesthetics of the common LaTeX editors. After all, an editor that is a joy to open is already half of what you need to write regularly. Here I would like to share a simple step-by-step guide to my favorite writing setup."},categories:{values:["science","technology","design"]},history:{in:{date:{year:2022,month:11,day:20}}}}},o={name:"LatexAndMarkdownInVisualStudioCode",layout:"default",created:function(){this.metadata=r}},l=n(2),component=Object(l.a)(o,(function(){var e=this,t=e.$createElement,r=e._self._c||t;return r("ArticleLayout",{attrs:{metadata:e.metadata}},[r("PaperPage",{staticClass:"numbered-headings",attrs:{"use-with-paper-patches":""}},[r("PaperPatch",[r("TextBlock",{staticClass:"text"},[r("p",{staticClass:"comment"},[e._v("\n Okay, I'll be honest. I'm writing this text for myself, because I have to look for the same instructions over and over again when I need to set up my writing environment on a new computer. So this is primarily documentation for me. I have only tested it on my own computers. But maybe it will help others.\n ")]),e._v(" "),r("br"),e._v(" "),r("p",[r("b",[e._v("Step 1: Install TeX Live")]),e._v(" as described "),r("Hyperlink",{attrs:{to:"https://www.tug.org/texlive/"}},[e._v("here by the TeX Users Group")]),e._v(". Note that the installation may take a long time if you install TeXLive with all features. On Windows, you are done. If you are installing this setup on Linux, you have to update "),r("code",[e._v("PATH")]),e._v(" manually. For me, this usually involves the following steps:\n ")],1),e._v(" "),r("ul",[r("li",[e._v("\n Go to the home directory of the current user logged in.\n ")]),e._v(" "),r("li",[e._v("\n Display hidden files.\n ")]),e._v(" "),r("li",[e._v("\n Edit the "),r("code",[e._v(".zshrc")]),e._v(" / "),r("code",[e._v(".bas
1hrc")]),e._v(" / ... file depending on the shell you are using.\n ")]),e._v(" "),r("li",[e._v("\n Add "),r("code",[e._v('PATH="/usr/local/texlive/YEAR/bin/PLATFORM:$PATH"')]),e._v(" adapted to your TeX Live installation to the end of the file. (e.g. "),r("code",[e._v('PATH="/usr/local/texlive/2022/bin/x86_64-linux:$PATH"')]),e._v(".)\n ")])]),e._v(" "),r("br"),e._v(" "),r("p",[r("b",[e._v("Step 2: Install Visual Studio Code")]),e._v(" as described on "),r("Hyperlink",{attrs:{to:"https://code.visualstudio.com/"}},[e._v("their official website")]),e._v(". After that, you should customize the editor so that it sparks joy. This is an important step. "),r("span",{staticClass:"comment"},[e._v("Personally, I use the Monokai theme. It's just beautiful and a pleasure to work with.")])],1),e._v(" "),r("br"),e._v(" "),r("p",[r("b",[e._v('Step 3: Install the VS Code Extension "LaTeX Workshop"')]),e._v(" by James Yu and contributors as described in the "),r("Hyperlink",{attrs:{to:"https://github.com/James-Yu/LaTeX-Workshop"}},[e._v("ReadMe of the project's repository")]),e._v(". Afterwards you can test your setup with a .tex file containing a simple document: "),r("code",[e._v("\\documentclass{article} \\begin{document} hei \\end{document}")])],1),e._v(" "),r("br"),e._v(" "),r("p",[r("b",[e._v("Step 4: Setup Markdown in your LaTeX project")]),e._v(" Open a new LaTeX project and edit the .tex file. In order to write Markdown in your .tex file, load the markdown package in your document preamble. Overleaf has a great tutorial article about "),r("Hyperlink",{attrs:{to:"https://www.overleaf.com/learn/how-to/Writing_Markdown_in_LaTeX_Documents"}},[e._v('"Writing Markdown in LaTeX Documents"')]),e._v(" that describes the various ways to use the package.\n ")],1),e._v(" "),r("p",{staticClass:"comment"},[e._v("\n You may need to change the default LaTeX recipe used by LaTeX Workshop to "),r("code",[e._v('"latexmk (lualatex)"')]),e._v(".\n ")]),e._v(" "),r("br"),e._v(" "),r("p",[r("b",[e._v("Step 5: Prepare your setup for collaboration.")]),e._v(" Git is an excellent choice as version control for your LaTeX project and for collaboration with others. Plus: If you want to collaborate with others who don't want to install a LaTeX solution on their local system, you can synchronize the Git repository with Overleaf, as described here: "),r("Hyperlink",{attrs:{to:"https://www.overleaf.com/learn/how-to/How_do_I_connect_an_Overleaf_project_with_a_repo_on_GitHub%2C_GitLab_or_BitBucket%3F "}},[e._v('"How do I connect an Overleaf project with a repo on GitHub, GitLab or BitBucket?"')]),e._v(".\n ")],1),e._v(" "),r("br"),e._v(" "),r("p",[e._v("\n That's it! Now you can write documents with LaTeX + Markdown in VS Code.\n ")])]),e._v(" "),r("WindowElement",{attrs:{identifier:"figure-1","media-metadata":[{source:n(724),type:"image",title:"",year:"",license:{},caption:"",alt:"An abstract image."}],"use-for-cover":!0,"hide-in-feed":"","hide-divider-in-feed":"","show-caption-in-feed":!1}}),e._v(" "),r("p",{staticClass:"comment"},[e._v("\n Please be attentive when installing software on your computer. Only install programs from sources you trust. This guide was written in 2022. The links were last checked when this guide was written.\n ")])],1)],1)],1)}),[],!1,null,"284f0c2a",null);t.default=component.exports;installComponents(component,{Hyperlink:n(63).default,TextBlock:n(355).default,WindowElement:n(356).default,PaperPatch:n(357).default,PaperPage:n(354).default,ArticleLayout:n(484).default})},function(e,t,n){"use strict";n.r(t),n.d(t,"metadata",(function(){return r}));var r={project:{pageIsProject:!0},page:{identity:{title:"Scale a ProBuilder Object in Unity",shortDe
1scription:"A short tutorial.",subdirectory:"how-to/scale-a-pro-builder-object-in-unity"},categories:{values:["technology","games"]},promotion:{icon:{source:n(566)}},history:{in:{date:{year:2022,month:11,day:24}}}}},o={name:"HowToScaleAProBuilderObjectInUnity",layout:"default",created:function(){this.metadata=r}},l=n(727),c=n(2);var component=Object(c.a)(o,(function(){var e=this,t=e.$createElement,r=e._self._c||t;return r("ArticleLayout",{attrs:{metadata:e.metadata}},[r("PaperPage",{staticClass:"numbered-headings",attrs:{"use-with-paper-patches":""}},[r("PaperPatch",[r("TextBlock",{class:[]},[r("p",[e._v("\n Here is a short tutorial on how you can scale a ProBuilder object in Unity without messing up the actual scale of the object's "),r("code",[e._v("transform")]),e._v(" (so it still has the scale "),r("code",[e._v("(1,1,1)")]),e._v(" and all the textures are correct after changing its size):\n ")])])],1),e._v(" "),r("WindowElement",{attrs:{identifier:"figure-1","media-metadata":[{source:n(725),fallbackSource:n(726),poster:n(566),type:"video",title:"Scaling a ProBuilder object in the Unity game engine.",year:"2022",license:{},caption:"An example workflow of scaling a ProBuilder object in the Unity game engine. The rights to the software shown are owned by Unity Technologies."}],"use-for-cover":!1}}),e._v(" "),r("PaperPatch",[r("TextBlock",[r("ol",{attrs:{type:"1"}},[r("li",[e._v("\n Prepare the ProBuilder toolbar and move your scene camera to the object in question.\n ")]),e._v(" "),r("li",[e._v("\n Switch to "),r("code",[e._v("Vertex Selection")]),e._v(" in the ProBuilder scene controls.\n ")]),e._v(" "),r("li",[e._v("\n Select the object by clicking on it.\n ")]),e._v(" "),r("li",[e._v("\n In the ProBuilder toolbar, set "),r("code",[e._v("SetHiddenElementSelection")]),e._v(" to "),r("code",[e._v("On")]),e._v(".\n ")]),e._v(" "),r("li",[e._v("\n Left-click and drag your cursor to cover the entire object with the selection rectangle. Then release the left mouse button. This selects all vertices, including the occluded vertices.\n ")]),e._v(" "),r("li",[e._v("\n Set "),r("code",[e._v("ToolTogglePosition")]),e._v(" (the tool options next to the tools in the upper row) to the mode that you need: "),r("code",[e._v("center")]),e._v(" will scale the object from the center in all directions, "),r("code",[e._v("pivot")]),e._v(" will scale the object relative to the pivot point. The first option is great when you have a complex shape. The second option is useful when you want the textures to be aligned at the pivot point. (Test both modes with a simple cube to get a better understanding of the modes.)\n ")]),e._v(" "),r("li",[e._v("\n Select the "),r("code",[e._v("Scale")]),e._v(" tool in the editor toolbar.\n ")]),e._v(" "),r("li",[e._v("\n Scale the object (/vertex cloud) using the scale tool gizmo.\n ")]),e._v(" "),r("li",[e._v("\n Done. Your object has a new size, but the object transform's scale is still "),r("code",[e._v("(1,1,1)")]),e._v(" so all other scale related features work as expected.\n ")])]),e._v(" "),r("p",{staticClass:"comment"},[e._v("\n The example shown refers to Unity version 2020.3.4f1 and ProBuilder version 4.1.2. The rights to the software shown are owned by Unity Technologies.\n ")])])],1)],1)],1)}),[],!1,(function(e){this.$style=l.default.locals||l.default}),"2cb0b75a",null);t.default=component.exports;installComponents(component,{TextBlock:n(355).default,PaperPatch:n(357).default,WindowElement:n(356).default,PaperPage:n(354).default,ArticleLayout:n(484).default})},function(e,t,n){"use strict";n.r(t),n.d(t,"metadata",(function(){return d}));n(26),n(23),n(31),n(38),n(39);var r=n(18);function o(object,e){var t=Object.keys(object);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(object);e&&(n=n.filter((function(e){return Object.getOwnPropertyDescriptor(object,e).enumerable}))),t.push.apply(t,n)}return t}function l(e){for(var i=1;i<arguments.length;i++){var source=null!=arguments[i]?arguments[i]:{};
1i%2?o(Object(source),!0).forEach((function(t){Object(r.a)(e,t,source[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(source)):o(Object(source)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(source,t))}))}return e}var c={project:{pageIsProject:!0},page:{identity:{title:"Student Projects",shortDescription:"Advising student projects: an incomplete list.",subdirectory:"academic-profile/student-projects"},abstract:{value:"I'm really proud to have advised over 200 amazing scientific student projects, including bachelor's and master's theses, seminar papers, and some really cool research programs. On this page, you'll find a diverse mix of topics and ideas that my students and I have dived into. I love sharing this experience, and I hope you'll find their work as inspiring and exciting as I do!"},promotion:{icon:{source:n(729)}},preview:{detailed:{},reel:{},priority:1},history:{description:"Advising student projects since in 2019.",from:{date:{year:2019}},to:{today:!0}}}},d={project:l({},c.project),page:l(l({},c.page),{},{categories:{values:["science","games","technology","design"]}})},m={name:"AcademicProfile",layout:"default",created:function(){this.metadata=d,this.internalMetadata=c}},h=n(2),component=Object(h.a)(m,(function(){var e=this,t=e.$createElement,r=e._self._c||t;return r("ArticleLayout",{attrs:{metadata:e.internalMetadata}},[r("PaperPage",{attrs:{"use-with-paper-patches":""}},[r("PaperPatch",[r("p",{staticClass:"comment"},[e._v("\n If you are interested in working with me, check out my "),r("Hyperlink",{attrs:{to:"/collaborate"}},[e._v("Collaborate")]),e._v(" and "),r("Hyperlink",{attrs:{to:"/open-topics"}},[e._v("Open Topics")]),e._v(" pages.\n ")],1),e._v(" "),r("p",[e._v("\n In 2024, I stopped archiving all the theses I advised. I may update the list at some point, but not now. At this point, the list of theses I have advised should be over 200.\n ")]),e._v(" "),r("h2",[e._v("Master Thesis")]),e._v(" "),r("ul",[r("li",[e._v('\n "Large-Scale Functional Game Space Simulation: an Agent-Based Approach Using Data-Oriented Design" by Linus Biermann, 2024\n ')]),e._v(" "),r("li",[e._v('\n "Automatic Detection of Macro Gameplay in Formal Gamespaces for eSports Broadcasts" by Lars Eble, 2024\n ')]),e._v(" "),r("li",[e._v('\n "PaceMaker: Development of a Practical Tool for Pacing Video Games" by Julian Geheeb, 2024\n ')]),e._v(" "),r("li",[e._v('\n "Development of an Unified Symbolic AI Tool for Unity" by Felix Kosian, 2024\n ')]),e._v(" "),r("li",[e._v('\n "Developing a Unified Wayfinding Support Framework for 3D Games" by Albert Zach, 2024\n ')]),e._v(" "),r("li",[e._v('\n "Storytelling as a Spatial Concept: Developing a Spatial Interface for Storytelling in Digital Games" by Levente Balázs, 2024\n ')]),e._v(" "),r("li",[e._v('\n "Methods and Tools for Gamespace Engineering: Developing a Web-Based Application to Assist the Planning Process of Gamespaces" by Viola Stumpf, 2023\n ')]),e._v(" "),r("li",[e._v('\n "Discussion as a Game: Using Games and Computer-Assisted Moderation to Promote Education About Diversity, Equity and Inclusion" by Viktoria Kirchleitner, 2023\n ')]),e._v(" "),r("li",[e._v('\n "Level Design: Developing a Blockout Editor for Games Using Virtual Reality" by Paul Pillau, 2023\n ')]),e._v(" "),r("li",[e._v('\n "Throwing, Catching, Juggling: Complex Physics-Based Interaction with Objects in Virtual Reality" by Lukas Bonauer, 2023\n ')]),e._v(" "),r("li",[e._v('\n "Documentation in Game Development: Exploring and Formulating Strategies for Effective Decision-Making Management" by Georg Eickelpasch, 2023\n ')]),e._v(" "),r("li",[e._v('\n "A Practical Approach to Documents in Game Development" by Alexandru Balotescu, 2023\n ')]),e._v(" "),r("li",[e._v('\n "Developing Extended Reality Real-Time Collaboration Methods for Spatial Design Processes" by Felix Neumeyer, 2023\n ')]),e._v(" "),r("li",[e._v('\n "Developing a Reactive
1Character Controller for 3D Action-Adventure Games" by Julius Krüger, 2023\n ')]),e._v(" "),r("li",[e._v('\n "Creating Interaction Methods for Visual State Diagram Editors" by Sahin Er, 2022\n ')]),e._v(" "),r("li",[e._v('\n "3D User Interfaces for Virtual World Engineering using Virtual Reality" by Marian Ludwig, 2022\n ')]),e._v(" "),r("li",[e._v('\n "Game Balancing: Fair Experiences in Competitive Multiplayer Video Games" by Van Minh Pham, 2022\n ')]),e._v(" "),r("li",[e._v('\n "Visual Debugging in Reactive Programming for Games" by Katharina Sadzik, 2022\n ')]),e._v(" "),r("li",[e._v('\n "Engineering a State Diagram Editor for Optimal Developer Experience" by Ariola Lami, 2022\n ')]),e._v(" "),r("li",[e._v('\n "Remote Assistance Tools for Virtual Experiences" by Maximilian Hotter, 2021\n ')]),e._v(" "),r("li",[r("Hyperlink",{attrs:{to:"https://wiki.tum.de/x/AobxNw"}},[e._v('"Information Flow in Distributed Multi-Agent Systems as a Game Mechanic for Immersive Story Worlds"')]),e._v(" by Jakob Raith, 2021\n ")],1),e._v(" "),r("li",[r("Hyperlink",{attrs:{to:"https://wiki.tum.de/x/wgUhO"}},[e._v('"Communication and Interaction Methods for Virtual Courses"')]),e._v(" by Maximilian Mayer, 2021")],1),e._v(" "),r("li",[r("Hyperlink",{attrs:{to:"https://wiki.tum.de/x/WgNFNw"}},[e._v('"Easy to Learn, Hard to Master: Tutorials for Challenging Games"')]),e._v(" by Leopold Traub, 2021")],1),e._v(" "),r("li",[e._v('\n "Smart Game Worlds: Application of Hierarchical Graphs Generated from Scene Structures" by Jean-Luc\n Etgen, 2021\n ')]),e._v(" "),r("li",[e._v('\n "Artificial Intelligence Assisted Content Generation for Games based on Hierarchical Graphs" by Winfried Baumann, 2021\n ')]),e._v(" "),r("li",[e._v('"Aesthetic Graph Drawing of Complex State Diagrams" by Cedric Fromm, 2021')]),e._v(" "),r("li",[r("Hyperlink",{attrs:{to:"https://wiki.tum.de/x/MQkzM"}},[e._v('"Development of an Emotion Engine for Games"')]),e._v(" by Ibrahim Asif Mirza, 2021")],1)]),e._v(" "),r("h2",[e._v("Bachelor Thesis")]),e._v(" "),r("ul",[r("li",[e._v('\n "Anchors and Boundaries: Developing a Game Engine System for Hierarchical Spatial Partitioning of Gamespaces" by Kerstin Pfaffinger, wip\n ')]),e._v(" "),r("li",[e._v('\n "Developing a Reactive Player Controller in the Godot Game Engine: A Teaching Approach" by Nicolas Ulrich, wip\n ')]),e._v(" "),r("li",[e._v('\n "Beyond the Threshold: Theory and Practice of Doors in Digital Game Worlds" by Ivan Rozhdestvenskii, wip\n ')]),e._v(" "),r("li",[e._v('\n "Modern Development Approaches for Metroidvania Games" by Sebastian Geheeb, wip\n ')]),e._v(" "),r("li",[e._v('\n "Managing Choice: Guiding Players Through Open-World Games" by Sascha Be
1nke, wip\n ')]),e._v(" "),r("li",[e._v('\n "Learning as a Game: Enhancing the Learning Experience of Students by Integrating Game-Typical Elements into Undergraduate Courses" by Anonymous, 2023\n ')]),e._v(" "),r("li",[e._v('\n "Enhancing Learning with Game Design: Developing Teaching Tools for University Courses Featuring Game-Typical Elements" by Lisa Keil, 2023\n ')]),e._v(" "),r("li",[e._v('\n "Methods and Tools for Diversity in Game Development" by Valentin Liebl, 2023\n ')]),e._v(" "),r("li",[e._v('\n "Reactive Programming Patterns for Games" by Quentin Stickler, 2023\n ')]),e._v(" "),r("li",[e._v('\n "Lösbarkeitsgraphen in der Spieleentwicklung: Entwicklung eines Tools für automatisierte Dungeon-Tests" by Yana Serpik, 2023\n ')]),e._v(" "),r("li",[e._v('\n "Creating Dynamic Game Spaces for Location-Based Games Based on Player Individuality" by Anonymous, 2023\n ')]),e._v(" "),r("li",[e._v('\n "A Functional Gamespace Model: Hierarchical Graphs and Spatial Partitioning Based on the Integrity of Space" by Anonymous, 2023\n ')]),e._v(" "),r("li",[e._v('\n "Games Engineering: A Formal Approach to Game Spaces" by Claudio Belloni, 2023\n ')]),e._v(" "),r("li",[e._v('\n "Procedural Content Generation for Dungeons with Focus on Replayability" by Flo Hauser, 2023\n ')]),e._v(" "),r("li",[e._v('\n "Maps in Video Games: Principles and Practice of Map-Based Wayfinding Support Techniques" by Tobias Heller, 2023\n ')]),e._v(" "),r("li",[e._v('\n "Diversity in Games: Methods and Tools for Inclusive Game Development" by Martin Schacherbauer, 2023\n ')]),e._v(" "),r("li",[e._v('\n "Developing a Boss Battle Framework for the Unity Game Engine" by Mike Molnár, 2023\n ')]),e._v(" "),r("li",[e._v('\n "Artificial Intelligence Assisted Content Generation for Level Design Processes" by Lukas Pichler, 2022\n ')]),e._v(" "),r("li",[e._v('\n "Optimization of Application Funnels with Game-Typical Elements" by Philipp Altrogge, 2022\n ')]),e._v(" "),r("li",[e._v('\n "State Machines in Game Development: A Serious Game about Theory and Application" by Philipp Müller, 2022\n ')]),e._v(" "),r("li",[e._v('\n "Creating Engaging Game Spaces for Location-Based Games Using Procedural Content Generation and Real-World Models" by Alexander Keussen, 2022\n ')]),e._v(" "),r("li",[e._v('\n "Boss Board: A Tabletop Modeling Approach to Boss Engineering" by Jacob Lütje, 2022\n ')]),e._v(" "),r("li",[e._v('\n "Level Design Patterns for Competitive Multiplayer First-Person Shooters" by Anonymous, 2022\n ')]),e._v(" "),r("li",[e._v('\n "Towards an Adaptive Framework: Pacing in Nonlinear Game Spaces" by Mahdis Sabzevarzadeh, 2022\n ')]),e._v(" "),r("li",[e._v('\n "Agent-Based Modelling as Level Design Method for Fair Gamespaces" by Marvin Neske, 2022\n ')]),e._v(" "),r("li",[e._v('\n "Developing a Virtual Reality Terrain Editor for the Godot Game Engine" by Damian Schneider, 2022\n ')]),e._v(" "),r("li",[e._v('\n "Unified Camera Controls: Developing a Camera System for 3D Computer Games" by Christoph Ertsy, 2022\n ')]),e._v(" "),r("li",[e._v('\n "Developing a Wayfinding Support Framework for Virtual Spaces" by Joshua Weggartner, 2022\n ')]),e._v(" "),r("li",[e._v('\n "Development of a Boss Design Tool in the Unity Game Engine" by Nikita Mukha, 2022\n ')]),e._v(" "),r("li",[e._v('\n "From Assets to Game Worlds: Pipeline Engineering for Level Design" by Paul Simon Hemming, 2022\n ')]),e._v(" "),r("li",[e._v('\n "Adaptive Quest Systems for Role-Playing Games" by Manuela Poschenrieder, 2022\n ')]),e._v(" "),r("li",[e._v('\n "Design Engineering of Metroidvania Games: Principles and Patterns" by Kim Simon, 2022\n ')]),e._v(" "),r("li",[e._v('\n "Procedural Dungeon Generation for Games Based on Hierarchical Graphs" by Lorenzen Meneses, 2022\n ')]),e._v(" "),r("li",[e._v('\n "Developing a Modular Agent Controller for 3D Games using Reactive Programming" by Maximilian Pfaff, 2022\n ')]),e._v(" "),r("li",[e._v('\n "Dynamic Pacing and Adaptive Challenges in Video Games" by Leonhard Chen, 2022\n ')]),e._v(" "),r("li",[e._v('\n "The Language of Bosses: A Formal Framework for Game Engineering" by Pascal Neubert, 2022\n ')]),e._v(" "),r("li",[e._v('\n "Gameplay Based Anti-Cheat Measures" by Caroline Rendenbach, 2022\n ')]),e._v(" "),r("li",[e._v('\n "Development of a Data-Oriented Gameplay Foundation System to Execute State Diagrams" by Daniel Garcia Laderas, 2022\n ')]),e._v(" "),r("li",[e._v('\n "Inclusion and Diversity in Game Development: Principles for Unbiased Design Decisions" by Lorena K. Vitale, 2022\n ')]),e._v(" "),r("li",[e._v('\n "Inclusion and Diversity in Game Engineering: An Ethical Framework for Game Development Processes" by Diana Hellmann, 2022\n ')]),e._v(" "),r("li",[e._v('\n "Agent-Based Modelling as Game Design Method for Combat Balancing" by Margarita Kukhtevich, 2022\n ')]),e._v(" "),r("li",[e._v('\n "Game Engineering Principles: Fair Gamespaces for Competitive Multiplayer Games" by Felix Bartossek, 2022\n ')]),e._v(" "),r("li",[r("Hyperlink",{attrs:{to:"https://wiki.tum.de/x/LoRIOg"}},[e._v('"Boss Engineering: Methods and Tools for Game Development"')]),e._v(" by Clemens Fromm, 2021\n ")],1),e._v(" "),r("li",[e._v('\n "Motion Planning using Hierarchical Graphs and Localized Tessellation of Two-Dimensional Space" by\n Simon Pirsch, 2021\n ')]),e._v(" "),r("li",[e._v('"Cinematography and Aesthetic Camera Control for Video Games" by Saman Miran, 2021')]),e._v(" "),r("li",[r("Hyperlink",{attrs:{to:"https://wiki.tum.de/x/pQQnN"}},[e._v('"Interactive Visualization of Complex State Diagrams for Optimal Developer Experience"')]),e._v(" by Moritz\n Will, 2021\n ")],1),e._v(" "),r("li",[e._v('\n "Design Principles Based on Game Elements to Support Wellbeing Demonstrated by a House Plant Care\n App" by Kseniia Chernikova, 2021\n ')]),e._v(" "),r("li",[e._v('\n "Procedural Generation of 2D Level Structures Based on Hierarchical Graphs:" by Mar
1kus Gumbart, 2021\n ')]),e._v(" "),r("li",[e._v('\n "Adaptive Difficulty in Massively Multiplayer Online Role-Playing Games to Create Optimal\n Experience" by Lukas Liu, 2021\n ')]),e._v(" "),r("li",[r("Hyperlink",{attrs:{to:"https://wiki.tum.de/x/KYdjN"}},[e._v('"Game Design Principles for Multiplicative Gameplay"')]),e._v(" by Katharina Seitz, 2021")],1),e._v(" "),r("li",[e._v('"Immersive Voice Interaction for Real-Time Tactics Games" by Felix Stieglbauer, 2021')]),e._v(" "),r("li",[r("Hyperlink",{attrs:{to:"https://wiki.tum.de/x/GgDDMw"}},[e._v('"Dynamic Storytelling Based on Complex Graphs"')]),e._v(" by Dominik Huber, 2021")],1),e._v(" "),r("li",[e._v('"Interactive 3D-Applications as Progressive Web Apps" by Valérie Redl, 2021')]),e._v(" "),r("li",[e._v('"Immersive Wayfinding for 3D Games" by Qiyuan Zhu, 2021')]),e._v(" "),r("li",[r("Hyperlink",{attrs:{to:"https://wiki.tum.de/x/QgYyLw"}},[e._v('"Development of a High-Performance Engine to Execute Statecharts for Games"')]),e._v(" by Matthias Ellerbeck, 2021\n ")],1),e._v(" "),r("li",[e._v('\n "Development of an Augmented Reality Application for the Stratey Board Game Go" by Tran Minh Nguyen\n Duc, 2021\n ')]),e._v(" "),r("li",[r("Hyperlink",{attrs:{to:"https://wiki.tum.de/display/infar/%5B20SS+-+BA%5D+Testability+of+Probabilistic+State+Diagrams"}},[e._v('"Testability of Probabilistic State Diagrams"')]),e._v(" by Maximilian Vollath, 2020")],1),e._v(" "),r("li",[r("Hyperlink",{attrs:{to:"https://wiki.tum.de/display/infar/%5B21WS+-+BA%5D+High+Performance+Programming%3A+Development+of+a+Gameplay+Foundation+System+Component+Based+on+Complex+State+Machines"}},[e._v('"High Performance Programming: Development of a Gameplay Foundation System Component Based on Complex State Machines"')]),e._v(" by Julian Geheeb, 2020\n ")],1),e._v(" "),r("li",[r("Hyperlink",{attrs:{to:"https://wiki.tum.de/display/infar/%5B20SS+-+BA%5D+Dynamic+Detection+of+Player+Types+and+Adaption+of+Game+Components+for+Optimal+User+Experience"}},[e._v('"Dynamic Detection of Player Types and Adaptation of Player Components for Optimal User Experience"')]),e._v(" by Viktoria Kirchleitner, 2020\n ")],1),e._v(" "),r("li",[r("Hyperlink",{attrs:{to:"https://wiki.tum.de/display/infar/%5B20SS+-+BA%5D+Enhancing+Inclusion+and+Innovation+in+Games+Engineering"}},[e._v('"Enhancing Inclusion and Innovation in Games Engineering"')]),e._v(" by Chrysa Bika, 2020")],1),e._v(" "),r("li",[e._v('\n "Interactive Simulation and Visualization of Molecular Structure Dynamics in Virtual Reality" by\n Philip Neugebauer, 2020\n ')]),e._v(" "),r("li",[r("Hyperlink",{attrs:{to:"https://wiki.tum.de/display/infar/%5B20WS+-+BA%5D+Information+Flow+in+Distributed+Multi-Agent+Systems"}},[e._v('"Information Flow in Distributed Multi-Agent Systems"')]),e._v(" by Lars Eble, 2020")],1),e._v(" "),r("li",[r("Hyperlink",{attrs:{to:"https://wiki.tum.de/display/infar/%5B20SS+-+BA%5D+Application+of+Spatial+Information+Derived+from+3D+Scene+Structures+in+Games"}},[e._v('"Application of Spatial Information Derived from 3D Scene Structures in Games"')]),e._v(" by Matthias Hainz,\n 2020\n ")],1),e._v(" "),r("li",[r("Hyperlink",{attrs:{to:"https://wiki.tum.de/display/infar/%5B20SS+-+BA%5D+Adaptive+Difficulty+in+Video+Games+to+Foster+Optimal+Experience"}},[e._v('"Adaptive Difficulty in Video Games to Foster Optimal Experience"')]),e._v(" by Georg Eickelpasch, 2020")],1),e._v(" "),r("li",[r("Hyperlink",{attrs:{to:"https://wiki.tum.de/display/infar/%5B19WS+-+BA%5D+Interactive+Storytelling+and+Emotions"}},[e._v('"Interactive Storytelling and Emotions"')]),e._v(" by Julius Krüger, 2020")],1),e._v(" "),r("li",[e._v('"Gamification of Common Workflows in Editor User Interfaces" by Akbar Suriaganda, 2020')]),e._v(" "),r("li",[r("Hyperlink",{attrs:{to:"https://wiki.tum.de/display/infar/%5B20SS+-+BA%5D+Game+Design+Principles+for+Story-Based+Action+Role-Playing+Games+Played+without+the+Sense+of+Sight"}}
1,[e._v('"Game Design Principles for Story-Based Action Role-Playing Games Played without the Sense of Sight"')]),e._v(" by Felix Borst, 2020\n ")],1),e._v(" "),r("li",[r("Hyperlink",{attrs:{to:"https://wiki.tum.de/display/infar/%5B20SS+-+BA%5D+Gameplay+Analysis+of+Competitive+Games+to+Support+the+Game+Design+Process"}},[e._v('"Gameplay Analysis of Competitive Games to Support the Game Design Process"')]),e._v(" by Luca Türk, 2020")],1),e._v(" "),r("li",[r("Hyperlink",{attrs:{to:"https://wiki.tum.de/display/infar/%5B19WS+-+BA%5D+Simulating+2D+Game+Physics+using+dynamic+Navigationgraphs"}},[e._v('"Simulating 2D Game Physics using dynamic Navigationgraphs"')]),e._v(" by Lars Hinnerk Grevsmühl, 2020")],1),e._v(" "),r("li",[r("Hyperlink",{attrs:{to:"https://wiki.tum.de/display/infar/%5B19WS+-+BA%5D+Analysis+of+Level+Design+Graphs"}},[e._v('"Analysis of Level Design Graphs"')]),e._v(" by Marcel Zurawka, 2020")],1),e._v(" "),r("li",[r("Hyperlink",{attrs:{to:"https://wiki.tum.de/display/infar/%5B19WS+-+BA%5D+Acoustic+Wayfinding+Support+in+Real+Environments+without+the+Sense+of+Sight"}},[e._v('"Acoustic Wayfinding Support in Real Environments without the Sense of Sight"')]),e._v(" by Mehment Dereli,\n 2020\n ")],1),e._v(" "),r("li",[r("Hyperlink",{attrs:{to:"https://wiki.tum.de/display/infar/%5B19WS+-+BA%5D+Acoustic+User+Interfaces+for+Improving+Situational+Awareness"}},[e._v('"Acoustic User Interfaces for Improving Situational Awareness"')]),e._v(" by Monika Srdic, 2020")],1),e._v(" "),r("li",[e._v('"Complex Interaction Mechanisms for Spectator Integration in Games" by Viola Stumpf, 2019')])])]),e._v(" "),r("WindowElement",{attrs:{"media-metadata":[{source:n(587),fallbackSource:n(588),poster:n(589),type:"video",title:"Ufer",credit:{label:"Daniel Dyrda",to:""},year:"2019",license:{label:"Copyright Daniel Dyrda",to:""},caption:""}],"use-for-cover":"","show-space-instead":!1}}),e._v(" "),r("PaperPatch",[r("h2",[e._v("Guided Research")]),e._v(" "),r("ul",[r("li",[e._v('"Virtual Teaching: Challenges and Opportunities" by Jeremias Bohn, 2021')]),e._v(" "),r("li",[e._v('"Aesthetic Graph Drawing of Hierarchical State Diagrams" by Maximilian Hotter, 2020')])]),e._v(" "),r("h2",[e._v("Seminar Paper")]),e._v(" "),r("GameAnalysisSeminarProjects"),e._v(" "),r("h2",[e._v("Master Lab Course")]),e._v(" "),r("p",[e._v("\n In connection with my "),r("Hyperlink",{attrs:{to:"/teaching/master-lab-course"}},[e._v("Master Lab Course")]),e._v(", I have had the privilege of advising numerous outstanding student projects. In recent years, this collaboration has resulted in the creation of over 12 exceptional projects. Below you will find some impressions.\n ")],1),e._v(" "),r("MasterLabCourseProjectList"),e._v(" "),r("h2",[e._v("Games")]),e._v(" "),r("p",[e._v("\n There are always countless great games projects being developed in my "),r("Hyperlink",{attrs:{to:"/teaching"}},[e._v("courses")]),e._v(". I don't have a list at the moment, but maybe I'll find the time to collect them soon.\n ")],1)],1)],1)],1)}),[],!1,null,null,null);t.default=component.exports;installComponents(component,{Hyperlink:n(63).default,PaperPatch:n(357).default,WindowElement:n(356).default,GameAnalysisSeminarProjects:n(508).default,MasterLabCourseProjectList:n(509).default,PaperPage:n(354).default,ArticleLayout:n(484).default})},function(e,t,n){"use strict";n.r(t),n.d(t,"metadata",(function(){return o}));var r=n(482),o={project:{identity:{title:"Play x Discuss: Women in Science",shortDescription:"A co-op discussion game.",externalProjectUrl:"https://docs.google.com/presentation/d/1OEi7NP6YZZ0b6cL0MEzIvkn87UZp-gx0Zxul56BOcWo/present",subdirectory:"play-discuss-women-in-science"},promotion:{icon:{source:n(567)},reel:{source:n(568),contentSize:"cover",type:"image"},gallery:{items:[{source:n(730),alt:'Poster "The Invisible Scientist".',thumbnail:{source:n(568),alt:""},type:"image",title:'Poster "The Invisible Scientist".',year:2024,caption:""},{source:n(731),alt:'Poster "Swimming with the Sharks".',thumbnail:{source:n(567),alt:""},type:"image",title:'Poster "Swimming with the Sharks".',year:2024,caption:""},{source:n(732),alt:'Poster "The Mentor".',thumbnail:{source:n(733),alt:""},type:"image",title:'Poster "The Mentor".',year:2024,caption:""}]}},preview:{priority:4,detailed:{}}
1,categories:{values:["games","science","design"]},types:{values:["game"]},history:{from:{version:"0.0.1",date:{year:2023}},to:{today:!0}}}},l={name:"PlayDiscussWomenInScience",components:{MastodonLink:r.default},layout:"default",created:function(){this.metadata=o}},c=n(2),component=Object(c.a)(l,(function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("SimpleProjectLayout",{attrs:{metadata:e.metadata}},[n("PaperPage",{attrs:{"use-with-paper-patches":""}},[n("PaperPatch",[n("p",[e._v('\n "Play x Discuss: Women in Science" is a cooperative discussion game about women in science. Players experience the stories of inspiring women and explore the challenges they have faced. They engage with common topics of Diversity, Equity, and Inclusion in a playful way. Through discussion, we want to raise awareness and let the players discover new perspectives for their own journey into science.\n ')]),e._v(" "),n("p",[n("span",{staticClass:"icon subtle"},[e._v("â")]),e._v(" "),n("b",[e._v("Pitch Deck: ")]),e._v(" Here you can find a short pitch deck with impressions from the game: "),n("Hyperlink",{attrs:{to:"https://docs.google.com/presentation/d/1OEi7NP6YZZ0b6cL0MEzIvkn87UZp-gx0Zxul56BOcWo/present"}},[e._v("\n Pitch Deck\n ")])],1),e._v(" "),n("p",[n("span",{staticClass:"icon subtle"},[e._v("â")]),e._v(" "),n("b",[e._v("Scientific Paper:")]),e._v(" We wrote a scientific paper about the game project that you can find here: "),n("Hyperlink",{attrs:{to:"/play-x-discuss-a-digital-cooperative-discussion-game-about-women-in-science"}},[e._v("\n Paper Project\n ")]),e._v(".\n ")],1),e._v(" "),n("p",[n("span",{staticClass:"icon subtle"},[e._v("â")]),e._v(" "),n("b",[e._v("Posters:")]),e._v(" Many people ask us about the artwork and posters we created for the project. The portraits were painted by Katharina Brand, and the posters were designed by me. You can download the posters here. We hope the posters can inspire some of you!\n ")]),e._v(" "),n("ul",[n("li",[n("Hyperlink",{attrs:{to:"/documents/play-x-discuss_poster_the-invisible-scientist.pdf","is-asset-link":""}},[e._v('Poster 1 â "The Invisible Scientist"')])],1),e._v(" "),n("li",[n("Hyperlink",{attrs:{to:"/documents/play-x-discuss_poster_swimming-with-the-sharks.pdf","is-asset-link":""}},[e._v('Poster 2 â "Swimming with the Sharks"')])],1),e._v(" "),n("li",[n("Hyperlink",{attrs:{to:"/documents/play-x-discuss_poster_the-mentor.pdf","is-asset-link":""}},[e._v('Poster 3 â "The Mentor"')])],1)])]),e._v(" "),n("WindowElement",{attrs:{"media-metadata":e.metadata.project.promotion.gallery.items,"hide-divider-in-feed":"",title:"Impressions"}})],1)],1)}),[],!1,null,null,null);t.default=component.exports;installComponents(component,{Hyperlink:n(63).default,PaperPatch:n(357).default,WindowElement:n(356).default,PaperPage:n(354).default,SimpleProjectLayout:n(370).default})},function(e,t,n){"use strict";n.r(t),n.d(t,"metadata",(function(){return r}));var r={project:{identity:{title:"Gamespace Knowledge Graph",shortDe
1scription:"A knowledge graph.",externalProjectUrl:"https://gamespace.dyrda.page",subdirectory:"gamespace-knowledge-graph"},promotion:{icon:{source:n(734)},reel:{source:n(504),fallbackSource:n(504),poster:n(504),type:"image"}},preview:{detailed:{}},categories:{values:["games","science","technology","design"]},types:{values:["knowledge graph"]},history:{from:{version:"0.0.1",date:{year:2023}},to:{today:!0}}}},o={name:"GamespaceKnowledgeGraph",layout:"default",created:function(){this.metadata=r}},l=n(2),component=Object(l.a)(o,(function(){var e=this,t=e.$createElement,r=e._self._c||t;return r("SimpleProjectLayout",{attrs:{metadata:e.metadata}},[r("PaperPage",{attrs:{"use-with-paper-patches":""}},[r("PaperPatch",[r("p",[e._v("\n The knowledge graph project is about an ever-evolving knowledge graph on the subject of games and play. This knowledge graph delves deep into the perspective of seeing games as systems of emotion, time, space, and possibility. Within this graph, each entry is termed a "),r("b",[e._v("Node")]),e._v(". These nodes symbolize specific aspects, thoughts, ideas, or concepts. In principle, this knowledge can be understood as a rhizome: everything is connected with everything. Thus, this knowledge should be seen in its entirety. Nevertheless, there are relations that are more present than others. Relations between nodes that are of special importance are established by "),r("b",[e._v("Links")]),e._v(", weaving together an intricate web of knowledge.\n ")]),e._v(" "),r("p",[e._v("\n Currently, the graph contains over 800 entries, and it is always expanding.\n The foundational philosophy of this knowledge graph is to intertwine practical processes with theoretical knowledge and experience, creating a seamless fusion of theory and practical insight. This approach is realized through "),r("b",[e._v("Fundamentals")]),e._v(", "),r("b",[e._v("Perspectives")]),e._v(", "),r("b",[e._v("Foci")]),e._v(", "),r("b",[e._v("Cases")]),e._v(", and "),r("b",[e._v("References")]),e._v(".\n ")]),e._v(" "),r("p",{staticClass:"comment"},[e._v("\n The graph contains over 800 entries, and it is always expanding. Currently, I am collaborating on this project with many of my students and colleagues, including key contributions by Claudio Belloni and Martin Schacherbauer. Together, we are working on a comprehensive knowledge base to understand games as systems of emotion, space, time, and possibility.\n ")]),e._v(" "),r("p",{staticClass:"comment"},[e._v("\n Originally created as a foundation for research, this knowledge graph has now become a key part of my teaching curriculum. Moving away from traditional slide-based presentations, I incorporate the knowledge graph directly into my teaching, allowing students to access a web-hosted version for a more interactive learning experience.\n ")]),e._v(" "),r("p",{staticClass:"comment"},[e._v("\n The knowledge graph is currently not publicly available, but I am considering its future release. In the meantime, if you are working with me on a research project, ask me for access to the knowledge graph; otherwise, stay in touch for updates on my future publications based on this knowledge graph.\n ")])]),e._v(" "),r("WindowElement",{attrs:{"media-metadata":[{source:n(503),fallbackSource:n(503),poster:n(503),type:"image"}],title:"Schema & Order","hide-divider-in-feed":""}})],1)],1)}),[],!1,null,null,null);t.default=component.exports;installComponents(component,{PaperPatch:n(357).default,WindowElement:n(356).default,PaperPage:n(354).default,SimpleProjectLayout:n(370).default})},function(e,t,n){"use strict";n.r(t),n.d(t,"metadata",(function(){return o}));var r=n(482),o={project:{identity:{title:"Playtesting Without Humans: Agent-Based Modeling as Testing Tool for Game Spaces",shortTitle:"Playtesting Without Humans: Agent-Based Modeling as Testing Tool...",shortDescription:"",subdirectory:"playtesting-without-humans",externalProjectUrl:"https://dl.gi.de/items/f6dc7146-b791-4495-a448-1ec8031177e8"},promotion:{},preview:{detailed:{type:"meta"}}
1,categories:{values:["technology","science","design"]},types:{values:["research paper"]},history:{in:{date:{year:2023}}}}},l={name:"PlaytestingWithoutHumans",components:{MastodonLink:r.default},layout:"default",created:function(){this.metadata=o}},c=n(2),component=Object(c.a)(l,(function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("SimpleScrollingLayout",{attrs:{metadata:e.metadata}},[n("TextBlock",{class:[]},[n("p",[n("b",[e._v("Abstract:")]),e._v(" The experience players have in a video game is heavily affected by the game spaces of the game. These game spaces are created in an iterative fashion with playtests in between to gather data regarding the quality. Playtests require lots of resources like time, supervisors, and playtesters. We propose an approach based on agent-based modeling using artificial intelligence agents to gather playtest data for the testing of video games. In this context, we present potential opportunities and risks by implementing a first demonstrator.\n ")]),e._v(" "),n("p",[n("b",[e._v("Paper:")]),e._v(" Neske, M., and Dyrda, D. (2023). Playtesting Without Humans: Agent-Based Modeling as Testing Tool for Game Spaces. SKILL 2023 - Studierendenkonferenz Informatik.\n ")]),e._v(" "),n("p",[n("span",{staticClass:"icon subtle"},[e._v("â")]),e._v(" "),n("Hyperlink",{attrs:{to:"https://dl.gi.de/items/f6dc7146-b791-4495-a448-1ec8031177e8"}},[e._v("Database Entry")])],1),e._v(" "),n("p",[n("span",{staticClass:"icon subtle"},[e._v("â")]),e._v(" "),n("Hyperlink",{attrs:{to:"https://dl.gi.de/server/api/core/bitstreams/1fba2e3b-3dfb-4492-bf2a-abdb0aefeefc/content"}},[e._v("Document")])],1)])],1)}),[],!1,null,null,null);t.default=component.exports;installComponents(component,{Hyperlink:n(63).default,TextBlock:n(355).default,SimpleScrollingLayout:n(368).default})},function(e,t,n){"use strict";n.r(t),n.d(t,"metadata",(function(){return o}));var r=n(482),o={project:{identity:{title:"Frameworks Enabling Ubiquitous Mixed Reality Applications Across Dynamically Adaptable Device Configurations",shortTitle:"Frameworks Enabling Ubiquitous Mixed Reality Applications...",shortDescription:"",subdirectory:"frameworks-enabling-ubiquitous-mixed-reality-applications-across-dynamically-adaptable-device-configurations"},promotion:{},preview:{detailed:{type:"meta"}},categories:{values:["technology","science"]},types:{values:["research paper"]},history:{in:{date:{year:2022}}}}},l={name:"PlaytestingWithoutHumans",components:{MastodonLink:r.default},layout:"default",created:function(){this.metadata=o}},c=n(2),component=Object(c.a)(l,(function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("SimpleScrollingLayout",{attrs:{metadata:e.metadata}},[n("TextBlock",{class:[]},[n("p",[n("b",[e._v("Paper:")]),e._v(" Weber, S., Rudolph, L., Eichhorn, C., Dyrda, D., Plecher, D. A., and Klinker, G. (2022). Frameworks Enabling Ubiquitous Mixed Reality Applications Across Dynamically Adaptable Device Configurations. Frontiers in Virtual Reality.\n ")]),e._v(" "),n("p",[n("b",[e._v("Abstract:")]),e._v(" If Mixed Reality applications are supposed to become truly ubiquitous, they face the challenge of an ever evolving set of hardware and software systems - each with their own standards and APIsâthat need to work together and become part of the same shared environment (the application). A unified standard is unlikely so we can not rely on a single software development stack to incorporate all necessary parts. Instead we need frameworks that are modular and flexible enough to be adapted to the needs of the application at hand and are able to incorporate a wide range of setups for devices, services, etc. We identified a set of common questions that can be used to characterize and analyze Mixed Reality applications and use these same questions to identify challenges as well as present solutions in the form of three frameworks tackling the fields of tracking and inference (UbiTrack), interaction (Ubi-Interact) and visualization (UbiVis). Tracking and inference has been addressed for quite some time now while interaction is a current topic with existing solutions. Visualization will be focused more in the future. We present several applications in development together with their future vision and explain how the frameworks help realize these and other potential apps.\n ")]),e._v(" "),n("p",[n("b",[e._v("Link:")]),e._v(" "),n("Hyperlink",{attrs:{to:"https://www.frontiersin.org/articles/10.3389/frvir.2022.765959/full"}},[e._v("â Article Page")])],1)])],1)}),[],!1,null,null,null);t.default=component.exports;installComponents(component,{Hyperlink:n(63).default,TextBlock:n(355).default,SimpleScrollingLayout:n(368).default})},function(e,t,n){"use strict";n.r(t),n.d(t,"metadata",(function(){return r}));var r={project:{identity:{title:"Retrospective on Teaching Game Analysis for Games Engineering Students",shortDe
1scription:"",subdirectory:"retrospective-on-teaching-game-analysis-for-games-engineering-students"},promotion:{},preview:{detailed:{type:"meta"}},categories:{values:["technology","science"]},types:{values:["research paper"]},history:{in:{date:{year:2022}}}}},o={name:"RetrospectiveOnTeachingGameAnalysis",layout:"default",created:function(){this.metadata=r}},l=n(2),component=Object(l.a)(o,(function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("SimpleScrollingLayout",{attrs:{metadata:e.metadata}},[n("TextBlock",{class:[]},[n("p",[n("b",[e._v("Abstract:")]),e._v(" Approaches for analyzing Games are studied in Games Studies for more than two decades now. Moreover, Game Analysis promises to offer a methodological possibility for computer science and game engineering and might become an important building block for our qualitative toolkit in human-centered computer science. However, the approach is still under-represented in fields of game-related computer science. As a first indicator of which research interests in games engineering could be approached with Game Analyses, this paper offers a retrospective of five sessions of a game analysis seminar with 94 seminar papers written by undergraduate students. It identifies retrospectively regions of interest and methodical tendencies. It shows anecdotally common pitfalls computer science students stumble upon and by describing the seminar structure, it gives an example, of how Game Analysis can be taught in a games engineering curriculum. This retrospective aims to open a dialogue between researchers from social studies and engineering fields and to add our perspectives to the discussion. This is our contribution toward defining a common ground for Game Analysis as an interdisciplinary method.\n ")]),e._v(" "),n("p",[n("b",[e._v("Paper:")]),e._v(" Rudolph, L., Dyrda, D., Plecher, D. A., and Klinker, G. (2022). Retrospective on Teaching Game Analysis for Games Engineering Students. Game Analysis Perspectives Conference (pp. 25-34).\n ")]),e._v(" "),n("p",[n("b",[e._v("Link:")]),e._v(" "),n("Hyperlink",{attrs:{to:"https://blogit.itu.dk/msgproject/wp-content/uploads/sites/35/2022/05/conference-proceedings.docx_.pdf#page=25"}},[e._v("â Article Page")])],1)])],1)}),[],!1,null,null,null);t.default=component.exports;installComponents(component,{Hyperlink:n(63).default,TextBlock:n(355).default,SimpleScrollingLayout:n(368).default})},function(e,t,n){"use strict";n.r(t),n.d(t,"metadata",(function(){return o}));var r=n(482),o={project:{identity:{title:"Ubi-Interact - Paper",shortDescription:"A research paper about the Ubi-Interact framework.",subdirectory:"ubi-interact-paper"},promotion:{},preview:{detailed:{type:"meta"}},categories:{values:["technology","science"]},types:{values:["research paper"]},history:{in:{date:{year:2020}}}}},l={name:"PlaytestingWithoutHumans",components:{MastodonLink:r.default},layout:"default",created:function(){this.metadata=o}},c=n(2),component=Object(c.a)(l,(function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("SimpleScrollingLayout",{attrs:{metadata:e.metadata}},[n("TextBlock",{class:[]},[n("p",[n("b",[e._v("Paper:")]),e._v(" Weber, S., Dyrda, D., Ludwig, M., and Klinker, G. (2020). Ubi-Interact. MobiQuitous 2020 - 17th EAI International Conference on Mobile and Ubiquitous Systems: Computing, Networking and Services (pp. 291-300).\n ")]),e._v(" "),n("p",[n("b",[e._v("Abstract:")]),e._v(" Ubi-Interact is a framework designed to facilitate interactive applications consisting of a variety of individual systems and devices that are distributed over a (local) network. It is designed to allow easy integration of devices and exchange of data based on extendable common data formats. It features edge computing capabilities, allowing to analyze and transform device data. The same computing modules can also be used to manage an arbitrary number of devices in an abstract fashion, allowing ad-hoc handling of (dis-)connecting devices and making devices with similar components/capabilities interchangeable while lowering the necessity to re-implement parts of the overall system behaviour.\n ")]),e._v(" "),n("p",[e._v("\n Specification and implementation of these applications should be modular, extendable and re-usable so users can share and improve on the work of others. Performance, re-usability of once established capabilities and easy integration of devices are the main points of interest for developing this framework\n ")]),e._v(" "),n("p",[n("b",[e._v("Link:")]),e._v(" "),n("Hyperlink",{attrs:{to:"https://dl.acm.org/doi/abs/10.1145/3448891.3448924"}},[e._v("â Article Page")])],1)])],1)}),[],!1,null,null,null);t.default=component.exports;installComponents(component,{Hyperlink:n(63).default,TextBlock:n(355).default,SimpleScrollingLayout:n(368).default})},function(e,t,n){"use strict";n.r(t),n.d(t,"metadata",(function(){return r}));var r={project:{identity:{title:"Specifying Volumes of Interest for Industrial Use Cases",shortDe
1scription:"A research paper.",hideDescriptionInDirectoryListView:!0,externalProjectUrl:"https://ieeexplore.ieee.org/document/10316485",subdirectory:"specifying-volumes-of-interest-for-industrial-use-cases"},promotion:{icon:{source:n(735)},reel:{source:n(569),fallbackSource:n(569),poster:n(736),contentSize:"contain",type:"video"}},preview:{detailed:{},priority:3},categories:{values:["science","technology"]},types:{values:["research paper"]},history:{in:{date:{year:2023}}}}},o={name:"Index",layout:"default",created:function(){this.metadata=r}},l=n(2),component=Object(l.a)(o,(function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("SimpleProjectLayout",{attrs:{metadata:e.metadata}},[n("PaperPage",{attrs:{"use-with-paper-patches":""}},[n("PaperPatch",[n("p",[n("b",[e._v("Abstract:")]),e._v(" Creating digital representations of industrial facilities presents substantial opportunities for the industry. The development of digital twins opens up many prospective applications for industrial plants, such as facilitating virtual training environments, streamlining change management, and providing real-time understanding of remote scenes. However, creating and maintaining these digital twins involves complex tasks, including scanning industrial plants and annotating their subsystems. Many use cases necessitate specifying a Volume of Interest (VoI) for further processing while presenting severe environmental challenges for segmentation quality and worker safety. Besides that, widespread adoption also depends on creating methods that are easy to use, even for workers with limited 3D interaction knowledge. Currently, no commonly implemented method fulfills all these diverse requirements. This paper introduces an approach for specifying a VoI in industrial scenarios. Our approach defines a volume by intersecting the projection of hand-drawn surroundings on a small number of pictures of the target volume, utilizing Augmented Reality and Voxel Carving. It can successfully handle various sizes of target volumes and delivers an appropriately detailed result. Applying qualitative discussions and a quantitative evaluation, we ensure our application meets all requirements posed by the scenarios. This simple interaction metaphor, tailored to specific use cases, can serve as a versatile pattern for various digital twin scenarios. It offers a valuable alternative to 3D primitive-based segmentation methods.\n ")]),e._v(" "),n("p",[n("b",[e._v("Paper:")]),e._v(" Dyrda, D., Klusmann, J., Rudolph, L., Stieglbauer, F., Amougou, M., Pantförder, D., Vogel-Heuser, B., and Klinker, G. (2023). Specifying Volumes of Interest for Industrial Use Cases. 22nd IEEE International Symposium on Mixed and Augmented Reality (ISMAR).\n ")]),e._v(" "),n("p",[n("span",{staticClass:"icon subtle"},[e._v("â")]),n("b",[e._v("Published Paper:")]),e._v(" "),n("Hyperlink",{attrs:{to:" https://ieeexplore.ieee.org/document/10316485"}},[e._v("IEEE Xplore")])],1)]),e._v(" "),n("WindowElement",{attrs:{"media-metadata":[e.metadata.project.promotion.reel],title:"Showcase","hide-divider-in-feed":""}})],1)],1)}),[],!1,null,null,null);t.default=component.exports;installComponents(component,{Hyperlink:n(63).default,PaperPatch:n(357).default,WindowElement:n(356).default,PaperPage:n(354).default,SimpleProjectLayout:n(370).default})},function(e,t,n){"use strict";n.r(t),n.d(t,"metadata",(function(){return r}));var r={project:{identity:{title:"Space Foundation System: An Approach to Spatial Problems in Games",shortTitle:"Space Foundation System: Spatial Problems in Games",shortDe
1scription:"A research paper.",hideDescriptionInDirectoryListView:!1,externalProjectUrl:"",subdirectory:"space-foundation-system-an-approach-to-spatial-problems-in-games"},promotion:{icon:{source:n(737)},gallery:{items:[{source:n(570),alt:"An image illustrating locations.",thumbnail:{source:n(570),alt:""},type:"image",title:"An image illustrating locations.",year:2024,caption:""},{source:n(571),alt:"An image illustrating the algorithm.",thumbnail:{source:n(571),alt:""},type:"image",title:"An image illustrating the algorithm.",year:2024,caption:""}]}},preview:{detailed:{},priority:4},categories:{values:["science","technology","design"]},types:{values:["research paper"]},history:{in:{date:{year:2024}}}}},o={name:"Index",layout:"default",created:function(){this.metadata=r}},l=n(2),component=Object(l.a)(o,(function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("SimpleProjectLayout",{attrs:{metadata:e.metadata}},[n("PaperPage",{attrs:{"use-with-paper-patches":""}},[n("PaperPatch",[n("p",[n("b",[e._v("Abstract:")]),e._v(" Current implementation approaches to spatial problems in digital games are not optimal. We identify a significant mismatch between the problem domain and the implementation domain. In this paper, we present the Space Foundation System, a technology for game engines based on a graph data structure focused on location-based semantics. We present a high-level algorithm and implementation approach for deriving a graph by subdividing the game's space based on integrity. The vision and possible applications of the framework are explored through the use of a gameplay scenario. The presented approach increases the abstraction level of the implementation domain and allows for the implementation of solutions for spatial problems closer to the problem domain.\n ")]),e._v(" "),n("p",[n("b",[e._v("Paper:")]),e._v(" Dyrda, D., and Belloni, C. (2024). Space Foundation System: An Approach to Spatial Problems in Games. IEEE Conference on Games 2024.\n ")]),e._v(" "),n("p",[n("span",{staticClass:"icon subtle"},[e._v("â")]),n("b",[e._v("DOI:")]),e._v(" "),n("Hyperlink",{attrs:{to:"https://doi.org/10.1109/CoG60054.2024.10645661"}},[e._v("10.1109/CoG60054.2024.10645661")]),e._v(".\n ")],1),e._v(" "),n("p",[n("span",{staticClass:"icon subtle"},[e._v("â")]),n("b",[e._v("Published Paper:")]),e._v(" "),n("Hyperlink",{attrs:{to:"https://ieeexplore.ieee.org/document/10645661"}},[e._v("IEEE Xplore")])],1),e._v(" "),n("p",[n("span",{staticClass:"icon subtle"},[e._v("â")]),n("b",[e._v("Accepted Author Manuscript:")]),e._v(" "),n("Hyperlink",{attrs:{to:"/documents/Dyrda2024_SpaceFoundationSystemAnApproachToSpatialProblemsInGames.pdf","is-asset-link":""}},[e._v("Document")])],1)]),e._v(" "),n("WindowElement",{attrs:{"media-metadata":e.metadata.project.promotion.gallery.items,title:"Figures","hide-divider-in-feed":""}})],1)],1)}),[],!1,null,null,null);t.default=component.exports;installComponents(component,{Hyperlink:n(63).default,PaperPatch:n(357).default,WindowElement:n(356).default,PaperPage:n(354).default,SimpleProjectLayout:n(370).default})},function(e,t,n){"use strict";n.r(t),n.d(t,"metadata",(function(){return r}));var r={project:{identity:{title:"Proposing Formal Game Spaces as Foundation for Gameplay-Based Anti-Cheating Measures",shortTitle:"Formal Game Spaces for Gameplay-Based Anti-Cheating Measures",shortDe
1scription:"A research paper.",hideDescriptionInDirectoryListView:!0,externalProjectUrl:"",subdirectory:"proposing-formal-game-spaces-as-foundation-for-gameplay-based-anti-cheating-measures"},categories:{values:["science","technology","design"]},types:{values:["research paper"]},history:{in:{date:{year:2024}}}}},o={name:"Index",layout:"default",created:function(){this.metadata=r}},l=n(2),component=Object(l.a)(o,(function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("SimpleScrollingLayout",{attrs:{metadata:e.metadata}},[n("p",[n("b",[e._v("Abstract:")]),e._v(" As the popularity of video games has increased, so has the incidence of cheating. Although researchers and game companies have developed various anti-cheating strategies, a common solution involves kernel-level implementations. However, kernel-level anti-cheating engines enjoy high privileges on a user's computer and thus raise significant privacy concerns. This paper advocates for a privacy-preserving alternative: a server-side anti-cheating engine based on formal game spaces. Our proposed solution leverages the formalization of the game space, analyzing the spatial and logical models of the video game to verify player behavior without compromising user privacy.\n ")]),e._v(" "),n("p",[n("b",[e._v("Paper:")]),e._v(" Rendenbach, C., and Dyrda, D. (2024). Proposing Formal Game Spaces as Foundation for Gameplay-Based Anti-Cheating Measures. IEEE Conference on Games 2024.\n ")]),e._v(" "),n("p",[n("span",{staticClass:"icon subtle"},[e._v("â")]),e._v(" "),n("Hyperlink",{attrs:{to:"https://ieeexplore.ieee.org/document/10645637/"}},[e._v("Database Entry")])],1)])}),[],!1,null,null,null);t.default=component.exports;installComponents(component,{Hyperlink:n(63).default,SimpleScrollingLayout:n(368).default})},function(e,t,n){"use strict";n.r(t),n.d(t,"metadata",(function(){return r}));var r={project:{identity:{title:"PaceMaker: A Practical Tool for Pacing Video Games",shortDe
1scription:"A research paper.",hideDescriptionInDirectoryListView:!1,externalProjectUrl:"",subdirectory:"pacemaker-a-practical-tool-for-pacing-video-games"},promotion:{icon:{source:n(738)},reel:{source:n(739),contentSize:"cover",type:"image"}},preview:{detailed:{},priority:4},categories:{values:["science","technology","design"]},types:{values:["research paper"]},history:{in:{date:{year:2024}}}}},o={name:"Index",layout:"default",created:function(){this.metadata=r}},l=n(2),component=Object(l.a)(o,(function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("SimpleScrollingLayout",{attrs:{metadata:e.metadata}},[n("p",[n("b",[e._v("Paper:")]),e._v(" Geheeb, J., Dyrda, D., and Geheeb, S. (2024). PaceMaker: A Practical Tool for Pacing Video Games. IEEE Conference on Games 2024.\n ")]),e._v(" "),n("p",[n("b",[e._v("Abstract:")]),e._v(" Designing pacing for video games presents a unique set of challenges. Due to their interactivity, non-linearity, and storytelling nature, many aspects must be coordinated and considered simultaneously. In addition, games are often developed in an iterative workflow, making revisions to previous designs difficult and time-consuming. In this paper, we present PaceMaker, a toolkit designed to enable common design workflows for pacing while addressing the above challenges. We conducted initial research on pacing and then implemented our findings in a platform-independent application that allows the user to define simple state diagrams to deal with the possibility space of games. The user can select paths on the directed graph to visualize a nodeâs data in intensity and gameplay category diagrams. After implementation, we created a demonstration of the tool and conducted qualitative interviews. While the interviews raised some concerns about the efficiency of PaceMaker, the results demonstrate the expressiveness of the toolkit and support the need for such a tool.\n ")]),e._v(" "),n("p",[n("span",{staticClass:"icon subtle"},[e._v("â")]),n("b",[e._v("Published Paper:")]),e._v(" "),n("Hyperlink",{attrs:{to:"https://ieeexplore.ieee.org/document/10645629"}},[e._v("IEEE Xplore")])],1)])}),[],!1,null,null,null);t.default=component.exports;installComponents(component,{Hyperlink:n(63).default,SimpleScrollingLayout:n(368).default})},function(e,t,n){"use strict";n.r(t),n.d(t,"metadata",(function(){return r}));var r={project:{identity:{title:"Unbound Rotation Tool for Unity",shortDe
1scription:"A tool for Unity.",subdirectory:"unbound-rotation-tool-for-unity",externalProjectUrl:"https://github.com/dyrdadev/unbound-rotation-tool-for-unity"},categories:{values:["technology","games"]},promotion:{icon:{source:n(518)},reel:{source:n(519),type:"image"}},preview:{detailed:{},reel:{cardType:"bigSquare"}},abstract:{value:'While game engines provide a lot of out-of-the-box tools, developing games often requires more sophisticated or specific tools in order to accelerate game development and design. This tutorial provides the user with a short tutorial on tool development in Unity and how they can distribute their own packages. The tutorial is a step-by-step tutorial for a rotation tool we call "Unbound Rotation Tool". In addition to rotating objects in the scene view, it also overrides the default Duplicate shortcut (CTRL/CMD + D). Instead of simply duplicating a game object, it duplicates the object with a random rotation. It aims to give game developers a short introduction into tool development in Unity, show its simplicity, and show advantages of writing development tools.'},history:{in:{date:{year:2024}}},contributors:{values:[{name:{forename:"Martin",surname:"Schacherbauer"},roles:{values:["author"]}},{name:{forename:"Daniel",surname:"Dyrda"},roles:{values:["author"]}}]}}},o={name:"UnboundRotationToolForUnityTutorial",layout:"default",created:function(){this.metadata=r,this.references=[{key:"Shoemake1992",citationAuthor:"Shoemake",citationYear:"1992",description:"Shoemake, K. (1992, May). ARCBALL: A user interface for specifying three-dimensional orientation using a mouse. In Graphics interface (Vol. 92, pp. 151-156)."}]}},l=n(2),component=Object(l.a)(o,(function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("SimpleProjectLayout",{attrs:{metadata:e.metadata}},[n("PaperPage",{staticClass:"numbered-headings",attrs:{"use-with-paper-patches":""}},[n("PaperPatch",[n("p",[e._v('\n The "Unbound Rotation Tool for Unity" adds an additional way to manipulate game objects in Unity: an unbound rotation tool that allows to rotate objects without thinking about axes. Further features include a random rotation for duplicating game objects while the tool is selected.\n ')]),e._v(" "),n("p",[e._v("\n The tool is still under development. You can find the repository "),n("Hyperlink",{attrs:{to:"https://github.com/dyrdadev/unbound-rotation-tool-for-unity"}},[e._v("here")]),e._v(".\n ")],1),e._v(" "),n("p",[e._v("\n The tool was created as reference for a course. You can find the tutorial to implement the tool "),n("Hyperlink",{attrs:{to:"/how-to/implement-an-unbound-rotation-tool-for-unity"}},[e._v("here")]),e._v(".\n ")],1)]),e._v(" "),n("WindowElement",{attrs:{"media-metadata":[e.metadata.project.promotion.reel],title:"Impressions","hide-divider-in-feed":""}})],1)],1)}),[],!1,null,"72774a5f",null);t.default=component.exports;installComponents(component,{Hyperlink:n(63).default,PaperPatch:n(357).default,WindowElement:n(356).default,PaperPage:n(354).default,SimpleProjectLayout:n(370).default})},function(e,t,n){"use strict";n.r(t),n.d(t,"metadata",(function(){return r}));var r={project:{pageIsProject:!0},page:{identity:{title:"Implement an Unbound Rotation Tool for Unity",shortDe
1scription:"A tutorial about Unity tools.",subdirectory:"how-to/implement-an-unbound-rotation-tool-for-unity"},categories:{values:["technology","games"]},promotion:{icon:{source:n(518)}},preview:{},abstract:{value:'This page offers a concise tutorial on developing tools in Unity and distributing your own packages. It provides a step-by-step guide to creating a rotation tool called the "Unbound Rotation Tool." This tutorial was written for students at the Technical University of Munich attending the "Interaction Methods and Devices" course. '},history:{in:{date:{year:2024}}},contributors:{values:[{name:{forename:"Martin",surname:"Schacherbauer"},roles:{values:["author"]}},{name:{forename:"Daniel",surname:"Dyrda"},roles:{values:["author"]}}]}}},o={name:"UnboundRotationToolForUnity",layout:"default",created:function(){this.metadata=r,this.references=[{key:"Shoemake1992",citationAuthor:"Shoemake",citationYear:"1992",description:"Shoemake, K. (1992, May). ARCBALL: A user interface for specifying three-dimensional orientation using a mouse. In Graphics interface (Vol. 92, pp. 151-156)."}]}},l=n(2),component=Object(l.a)(o,(function(){var e=this,t=e.$createElement,r=e._self._c||t;return r("ArticleLayout",{attrs:{metadata:e.metadata}},[r("PaperPage",{staticClass:"numbered-headings",attrs:{"use-with-paper-patches":""}},[r("PaperPatch",[r("p",{staticClass:"comment"},[e._v('\n Note: This tutorial was written for students at the Technical University of Munich attending the "Interaction Methods and Devices" course. Additionally, the tutorial can be used by anyone with some Unity experience.\n ')])]),e._v(" "),r("WindowElement",{attrs:{identifier:"figure-1","media-metadata":[{source:n(519),type:"image",title:"Impression",credit:{label:"Martin Schacherbauer (2024)",to:""},year:"2024",alt:"The Unity editor toolbar with our added icon.",caption:"The Unity editor toolbar with our added icon."}],"use-for-cover":!0,"hide-divider-in-feed":""}}),e._v(" "),r("PaperPatch",[r("h2",{attrs:{id:"sec:intro"}},[e._v("Introduction")]),e._v(" "),r("p",[e._v("\n A key feature of game engines is the range of tools they offer to help developers create their games. However, developers often need specialized tools that are not included by default in the engine. This tutorial offers insights into tool development in Unity, demonstrating how to create a custom tool through a practical example. In this tutorial, we redevelop the "),r("Hyperlink",{attrs:{to:"/unbound-rotation-tool-for-unity"}},[e._v("Unbound Rotation Tool")]),e._v(".\n ")],1),e._v(" "),r("h2",{attrs:{id:"sec:packageunity"}},[e._v("Create Your Own Unity Package")]),e._v(" "),r("p",[e._v("\n Before starting with our tool, we need to set up our folder structure correctly. Instead of developing our tool inside the "),r("code",[e._v("Assets")]),e._v(" folder, we want to work directly in the "),r("code",[e._v("Packages")]),e._v(" folder. That way, Unity interprets our code as a package and also shows errors that would occur if we installed the package from an outside source. Here's the first few steps for our package:\n ")]),e._v(" "),r("ol",[r("li",[r("p",[e._v("\n Navigate to your project's "),r("code",[e._v("Packages")]),e._v(" folder in your file explorer, create a new folder and "),r("Hyperlink",{attrs:{to:"https://docs.unity3d.com/6000.0/Documentation/Manual/cus-naming.html"}},[e._v("give it a meaningful name")]),e._v(". Then navigate to the newly created folder.\n ")],1)]),e._v(" "),r("li",[r("p",[e._v("\n Add a new file "),r("code",[e._v("package.json")]),e._v(" to this folder. Then, look at "),r("Hyperlink",{attrs:{to:"https://docs.unity3d.com/6000.0/Documentation/Manual/upm-manifestPkg.html#example"}},[e._v("the Unity Documentation")]),e._v(" regarding the layout and required information in the package manifest. Fill out at least the required and recommended properties. This file defines the folder as a package. A new package should now show up in your Unity editor with the name you gave the package in its manifest. If there are errors, Unity will show them to you.\n ")],1)]),e._v(" "),r("li",[r("p",[e._v("\n Whenever we write editor code, we usually create an "),r("code",[e._v("Editor")]),e._v(" folder and everything that is related to editor features is created inside of this folder. Editor scripts are linked via an "),r("Hyperlink",{attrs:{to:"https://docs.unity3d.com/6000.0/Documentation/Manual/assembly-definitions-creating.html#create-asmref"}},[e._v("assembly definition asset")]),e._v(" inside the "),r("code",[e._v("Editor")]),e._v(" folder. For our package, create a new "),r("code",[e._v("Editor")]),e._v(" folder and then create a new assembly definition asset inside of this folder. Make sure that the assembly definition is valid for editor code (see section further down on the website).\n ")],1)])]),e._v(" "),r("p",[e._v("\n For now, these are the only required steps for our package. Make sure that whenever we add something you add it inside the "),r("code",[e._v("Packages")]),e._v(" folder and n
1ot the "),r("code",[e._v("Assets")]),e._v(" folder of your project.\n ")]),e._v(" "),r("h2",{attrs:{id:"sec:edittoolsinunity"}},[e._v("Create an Editor Tool in Unity")]),e._v(" "),r("p",[e._v("\n In this chapter, we will implement the interface of our tool. We want to have our own icon in Unity's transform toolbar of the scene window that already contains other tools (Hand, Move, Rotate, etc.).\n ")]),e._v(" "),r("p",[e._v("\n These are the steps to add your own icon to the Unity transform toolbar:\n ")]),e._v(" "),r("ol",[r("li",[r("p",[e._v("\n Make your own icon or select a suitable icon. The icon should be a "),r("code",[e._v(".png")]),e._v(" file. It does not require a big resolution. We used a 16x16 image as seen in the screenshot. Save it inside the package and make note of its location.\n ")])]),e._v(" "),r("li",[r("p",[e._v("\n Next, we create the script for our tool. Inside the "),r("code",[e._v("Editor")]),e._v(" folder of our package, create a new C# script and give it a meaningful name.\n ")])]),e._v(" "),r("li",[r("p",[e._v("\n Inside the script, delete all the dependencies of "),r("code",[e._v("MonoBehavior")]),e._v(" (including the "),r("code",[e._v("Start")]),e._v(" and "),r("code",[e._v("Update")]),e._v(" method).\n ")])]),e._v(" "),r("li",[r("p",[e._v("\n Then, inherit from the class "),r("code",[e._v("EditorTool")]),e._v(". We want our tool to be available for all objects, so we want a global tool. Add the "),r("Hyperlink",{attrs:{to:"https://docs.unity3d.com/6000.0/Documentation/Manual/unity-attributes.html"}},[e._v("attribute")]),e._v(" "),r("code",[e._v("EditorTool")]),e._v(" with your tool name as its attribute. You can find how to do so "),r("Hyperlink",{attrs:{to:"https://docs.unity3d.com/ScriptReference/EditorTools.EditorToolAttribute.html"}},[e._v("here")]),e._v(". As soon as this works, you should see a new button in the toolbar of the scene window.\n ")],1)]),e._v(" "),r("li",[r("p",[e._v("\n Now, we want to add our own icon to the toolbar. The "),r("code",[e._v("EditorTool")]),e._v(" class provides a public property "),r("code",[e._v("toolbarIcon")]),e._v(" which we will override. This property is accessed frequently. Therefore, we will load and unload the icon in the "),r("code",[e._v("OnEnable")]),e._v(" and "),r("code",[e._v("OnDisable")]),e._v(" methods. The "),r("Hyperlink",{attrs:{to:"https://docs.unity3d.com/ScriptReference/EditorTools.EditorTool-toolbarIcon.html"}},[e._v("Unity documentation's sample code")]),e._v(" provides a good baseline. When setting the icon in the "),r("code",[e._v("OnEnable")]),e._v(" method, we want to use our custom icon. "),r("Hyperlink",{attrs:{to:"https://docs.unity3d.com/Manual/upm-assets.html"}},[e._v("Here")]),e._v(" you can find more information on loading textures inside a package. Load the texture and set the toolbarIcon to our icon.\n ")],1)])]),e._v(" "),r("p",[e._v("\n After these steps, the scene toolbar should show your new icon and you can select the new tool via this icon. For even more functionality, let us add a shortcut for our tool as well.\n ")]),e._v(" "),r("ol",[r("li",[r("p",[e._v("\n Add a new static method to your class and add the "),r("Hyperlink",{attrs:{to:"https://docs.unity3d.com/ScriptReference/ShortcutManagement.ShortcutAttribute-ctor.html"}},[r("code",[e._v("ShortcutAttribute")])]),e._v(" to this method. With this attribute, we register a new shortcut to the Unity editor and when the specified key(s) are pressed, this method will be executed. The "),r("code",[e._v("ShortcutAttribute")]),e._v(" could look like this: "),r("code",[e._v('[Shortcut("Activate Arcball Selection Tool", KeyCode.U, ShortcutModifiers.Control)]')])],1)]),e._v(" "),r("li",[r("p",[e._v("\n The code inside the method is responsible for setting our tool as the currently active tool. The "),r("Hyperlink",{attrs:{to:"https://docs.unity3d.com/ScriptReference/EditorTools.ToolManager.html"}},[r("code",[e._v("ToolManager")])]),e._v(" is responsible for that kind of logic. Find the right method and call it in the newly created method.\n ")],1)])]),e._v(" "),r("p",[e._v("\n Now, whenever the user presses the shortcut key(s), Unity should automatically select our tool.\n ")]),e._v(" "),r("p",{staticClass:"comment"},[e._v("\n Note: It might be the case that when you first use the shortcut, Unity recognizes a conflict if you chose a key-combination that is already a registered shortcut in Unity. You can always change all keybinds later on in "),r("code",[e._v("Edit > Project Settings > Input")]),e._v(".\n ")]),e._v(" "),r("h2",{attrs:{id:"sec:rotationtoolimplementation"}},[e._v("Implementing the Arcball Behavior")]),e._v(" "),r("p",[e._v("\n The implementation of our rotation tool follows the Arcball method as described
1in the lecture and by "),r("Citation",{attrs:{references:e.references,citations:[{key:"Shoemake1992"}]}}),e._v(". However, we made a slight adaptation: unlike the default Arcball implementation, which is fixed to a static camera or modifies only the camera's orientation, our version adjusts the object's orientation directly as seen from the scene camera.\n ")],1),e._v(" "),r("h3",[e._v("Setup")]),e._v(" "),r("p"),e._v("\n For the script, we need to track the following values:\n "),r("p"),e._v(" "),r("ul",[r("li",[r("p",[e._v("\n The initial mouse position on the 2D screen when pressing the left mouse button.\n ")])]),e._v(" "),r("li",[r("p",[e._v("\n The 3-dimensional vectors "),r("code",[e._v("v0")]),e._v(" and "),r("code",[e._v("v1")]),e._v(".\n ")])]),e._v(" "),r("li",[r("p",[e._v("\n A boolean indicating whether we are currently rotating or not.\n ")])])]),e._v(" "),r("p"),e._v("\n Add these properties to your class and initialize all values.\n "),r("p"),e._v(" "),r("h3",[e._v("Implementing the Arcball Logic")]),e._v(" "),r("p",[e._v("\n When the mouse is being dragged, our tool rotates the selected "),r("code",[e._v("GameObject")]),e._v(". This is the main part of the implementation and just like the Arcball implementation in the lecture, we will put the logic in three methods: "),r("code",[e._v("Calculate3DVectorFromGaussianImage")]),e._v(", "),r("code",[e._v("CalculateRotation")]),e._v(", and "),r("code",[e._v("RotateViaArcball")]),e._v(".\n ")]),e._v(" "),r("p",[e._v("\n The first method calculates our 3D vector from the gaussian image (i.e., our two mouse positions). The method should have the following signature: "),r("code",[e._v("public Vector3 Calculate3DVectorFromGaussianImage(Vector2 newMousePosition)")]),e._v(". Here's what we need to do in that method:\n ")]),e._v(" "),r("ol",[r("li",[r("p",[e._v("\n We need to calculate the delta of our current mouse position and the initial mouse position. For the x direction, we invert the result (otherwise, our tool rotates in the wrong direction).\n ")])]),e._v(" "),r("li",[r("p",[e._v("\n Calculate the "),r("code",[e._v("length")]),e._v(" of that position change.\n ")])]),e._v(" "),r("li",[r("p",[e._v("\n The "),r("code",[e._v("yaw")]),e._v(" based on the mouse position equals the arctan of the delta on the y axis to the delta on the x axis. You can use the "),r("code",[e._v("Atan2")]),e._v(" method of the "),r("code",[e._v("Mathf")]),e._v(" class for this.\n ")])]),e._v(" "),r("li",[r("p",[e._v("\n For the "),r("code",[e._v("pitch")]),e._v(", we take the arccosine of the length calculated in step 2 and divide it by a number representing the maximal length. The number defines how much change in mouse position we allow before the value of the arccosine becomes invalid (remember that the arccosine is only defined in the range of "),r("code",[e._v("[-1, 1]")]),e._v("). You can define the max value based on "),r("code",[e._v("Screen.height")]),e._v(" and "),r("code",[e._v("Screen.width")]),e._v(".\n ")])]),e._v(" "),r("li",[r("p",[e._v("\n For the z coordinate of our 3D vector, we take the sine of the pitch.\n ")])]),e._v(" "),r("li",[r("p",[e._v("\n Before calculating the x and y coordinate, we calculate a "),r("code",[e._v("scaling factor")]),e._v(". The factor equals the cosine of the pitch.\n ")])]),e._v(" "),r("li",[r("p",[e._v("\n The x and y coordinate of our 3D vector equal the cosine and sine of the yaw, respectively. Scale the result with the "),r("code",[e._v("scaling factor")]),e._v(" calculated in step 6.\n ")])]),e._v(" "),r("li",[r("p",[e._v("\n Before we can return the vector, we need to apply the camera rotation of the current scene view that is being drawn. Look "),r("Hyperlink",{attrs:{to:"https://docs.unity3d.com/ScriptReference/SceneView.html"}},[e._v("here")]),e._v(" or use your IDEâs IntelliSense to find that rotation.\n ")],1)]),e._v(" "),r("li",[e._v("\n The resulting 3D vector is our return value.\n ")])]),e._v(" "),r("p",[e._v("\n Now we can map a 2D mouse movement to a 3D vector. Next, we want to calculate our rotation based on the Arcball method. For this we need a helper method that calculates a rotation. This method returns a "),r("code",[e._v("Quaternion")]),e._v(" rotation based on two 3D input vectors (our "),r("code",[e._v("v0")]),e._v(" and "),r("code",[e._v("v1")]),e._v("). The method should have the following signature: "),r("code",[e._v("public Quaternion CalculateRotation(Vector3 v0, Vector3 v1)")]),e._v(".\n ")]),e._v(" "),r("ol",[r("li",[r("p",[e._v("\n Calculate the rotation angle. This is the dot product between the two input vectors.\n ")])]),e._v(" "),r("li",[r("p",[e._v("\n We define the rotation axis as the cross product of the two input vectors. After normalizing this cross product, you need to apply the inverse rotation of the targetâs "),r("code",[e._v("GameObject")]),e._v("'s "),r("code",[e._v("Transform")]),e._v(". You can access the target via the "),r("code",[e._v("target")]),e._v(" property of "),r("code",[e._v("EditorTool")]),e._v(". You can cast the target to a "),r("code",[e._v("GameObject")]),e._v(" - we will introduce the required sanity checks in the "),r("code",[e._v("OnToolGUI")]),e._v(" method later. Remember to apply the calculation in the correct order: "),r("code",[e._v("var rotaxis = Quaternion.Inverse(((GameObject)target).transform.rotation) * Vector3.Cross(v0, v1).normalized;")]),e._v(".\n ")])]),e._v(" "),r("li",[r("p",[e._v("\n We want our return value to equal the rotation of the value we got in step 1 around the rotation axis we got in step 2. The "),r("code",[e._v("Quaternion")]),e._v(" "),r("Hyperlink",{attrs:{to:"https://docs.unity3d.com/ScriptReference/Quaternion.html"}}
1,[e._v("class")]),e._v(" provides the "),r("code",[e._v("AngleAxis")]),e._v(" method to do exactly that.\n ")],1)]),e._v(" "),r("li",[e._v("\n Return this value.\n ")])]),e._v(" "),r("p",[e._v("\n Last, we need a method that uses the other two methods we have already implemented to calculate the arcball rotation. We'll later call this method whenever the mouse is dragged. The method should have the following signature: "),r("code",[e._v("public void RotateViaArcball(Vector2 newMousePosition)")]),e._v(".\n ")]),e._v(" "),r("ol",[r("li",[r("p",[e._v("\n Set "),r("code",[e._v("v0")]),e._v(" to the old value of "),r("code",[e._v("v1")]),e._v(". Update "),r("code",[e._v("v1")]),e._v(" to the new value calculated via "),r("code",[e._v("Calculate3DVectorFromGaussianImage")]),e._v(" (mapping mouse position to a 3D vector).\n ")])]),e._v(" "),r("li",[r("p",[e._v("\n Get the new rotation change for the target by calculating the rotation with "),r("code",[e._v("CalculateRotation(v0, v1)")]),e._v(". You also need to take into account the rotation of the target itself! "),r("code",[e._v("Quaternion newRotation = ((GameObject)target).transform.rotation * CalculateRotation(v0, v1);")])])]),e._v(" "),r("li",[r("p",[e._v("\n Apply the rotation to our "),r("code",[e._v("target")]),e._v(".\n ")])])]),e._v(" "),r("h3",{attrs:{id:"sec:functionalitytool"}},[e._v("Putting It All Together")]),e._v(" "),r("p",[e._v("\n We now have all the puzzle pieces to our tool. In order for our tool to work, we need to put it all together. Our implementation reacts to three events: When the left mouse button is first pressed "),r("code",[e._v("MouseDown")]),e._v(", while dragging the mouse "),r("code",[e._v("MouseDrag")]),e._v(", and when the left mouse button is lifted "),r("code",[e._v("MouseUp")]),e._v(". We implement the described behavior in the "),r("code",[e._v("OnToolGUI")]),e._v(" method. "),r("code",[e._v("public override void OnToolGUI(EditorWindow window)")])]),e._v(" "),r("ol",[r("li",[r("p",[e._v("\n First, check whether the parameter window is actually a "),r("code",[e._v("SceneView")]),e._v(". If not, we do not want to execute any code, as our tool should only work in the "),r("code",[e._v("SceneView")]),e._v(", but not in the directory view, for instance. "),r("code",[e._v("if (!(window is SceneView))")])])]),e._v(" "),r("li",[r("p",[e._v("\n We do some sanity checks for the "),r("code",[e._v("target")]),e._v(": We only want to be able to rotate if the target is not "),r("code",[e._v("null")]),e._v(" and it is a "),r("code",[e._v("GameObject")]),e._v(". "),r("code",[e._v("if (target == null || !(target is GameObject))")])])]),e._v(" "),r("li",[r("p",[e._v("\n Because we want to override the default mouse behavior of Unity when the tool is selected, we need to add a default control like this: "),r("code",[e._v("HandleUtility.AddDefaultControl(GUIUtility.GetControlID(FocusType.Passive));")])])]),e._v(" "),r("li",[r("p",[e._v("\n In total, we have three states that we need to take care of: "),r("code",[e._v("MouseDown")]),e._v(", "),r("code",[e._v("MouseDrag")]),e._v(", and "),r("code",[e._v("MouseUp")]),e._v(". Get the current event and set up a "),r("code",[e._v("switch")]),e._v(" case statement with these three events. This includes the switch "),r("code",[e._v("switch (Event.current.GetTypeForControl(controlID))")]),e._v(" and the three cases "),r("code",[e._v("case EventType.MouseDown:")]),e._v(", "),r("code",[e._v("case EventType.MouseDrag:")]),e._v(", and "),r("code",[e._v("case EventType.MouseUp:")]),e._v(". For all of them, check that the left mouse button is the one that triggers the event. Remember additional checks (such as "),r("code",[e._v("MouseDrag")]),e._v(" requiring that we are already rotating).\n ")])]),e._v(" "),r("li",[r("p",[e._v("\n Implement the functionality for "),r("code",[e._v("MouseDown")]),e._v(", "),r("code",[e._v("MouseDrag")]),e._v(", and "),r("code",[e._v("MouseUp")]),e._v(":\n ")]),e._v(" "),r("ul",[r("li",[r("p",[r("b",{attrs:{id:"sec:mousedownBehavior"}},[e._v("MouseDown Behavior")]),e._v("\n When the left mouse button is clicked, we need to (i) set that rotating has started, (ii) set the initial mou
1se position, and (iii) based on that initial mouse position calculate our 3D vector on the sphere and set it for both "),r("code",[e._v("v0")]),e._v(" and "),r("code",[e._v("v1")]),e._v(".\n ")])]),e._v(" "),r("li",[r("b",{attrs:{id:"sec:mouseupBehavior"}},[e._v("MouseUp Behavior")]),e._v("\n When the left mouse button is lifted, we need to update our rotation indicator boolean to indicate that the rotation has stopped.\n ")]),e._v(" "),r("li",[r("b",{attrs:{id:"sec:mousedragBehavior"}},[e._v("MouseDrag Behavior")]),e._v("\n When the mouse is being dragged, our tool rotates the selected "),r("code",[e._v("GameObject")]),e._v(" by invoking "),r("code",[e._v("RotateViaArcball")]),e._v(".\n ")])])])]),e._v(" "),r("p",[e._v("\n Now, our tool is ready to be used: When you select a "),r("code",[e._v("GameObject")]),e._v(" in the scene view (preferably something with a "),r("code",[e._v("Renderer")]),e._v(" so you can see the changes), select the tool, and then drag your mouse around, the selected object should rotate.\n ")]),e._v(" "),r("h2",{attrs:{id:"sec:toolvisuals"}},[e._v("Tool Visuals")]),e._v(" "),r("p",[e._v("\n Although the toolâs functionality is fully implemented, adding visual feedback would enhance the user experience. To achieve this, we can draw a sphere around the object, similar to Unityâs rotation tool, and visually indicate its rotation. Use the "),r("Hyperlink",{attrs:{to:"https://docs.unity3d.com/ScriptReference/Handles.html"}},[r("code",[e._v("Handles")]),e._v(" class")]),e._v(" and its built-in drawing methods.You can choose how to represent the sphere and rotation axes. This can be done by defining fixed lengths and radii or calculating them dynamically based on the object's size (e.g., using its "),r("code",[e._v("Mesh Filter")]),e._v(" to determine dimensions).\n ")],1),e._v(" "),r("p",{staticClass:"comment"},[e._v("\n Note: When adding new references to your scripts, you might encounter an error. This happens because the required package is a dependency that isn't included by default in your project. To resolve this, go to your assembly definition in Unity and add the necessary reference under "),r("code",[e._v("Assembly Definition References")]),e._v(". Once the reference is added, Unity will recompile your project.\n ")]),e._v(" "),r("h2",{attrs:{id:"Random Rotation Duplication"}},[e._v("Extending the Tool: Random Rotation Duplication")]),e._v(" "),r("p",[e._v("\n We aim to enhance our rotation tool by overriding the default duplication shortcut. Instead of simply duplicating the selected object, this feature will create a duplicate with a random rotation. You can choose which axis or axes to apply the random rotation. This demonstrates how to override default shortcuts and implement custom logic for specific tools. The functionality and code are adapted from "),r("Hyperlink",{attrs:{to:"https://www.reddit.com/r/Unity3D/comments/bnc56t/improving_unity_custom_duplicate/"}},[e._v("this Reddit thread")]),e._v(".\n ")],1),e._v(" "),r("ol",[r("li",[r("p",[e._v("\n First, create a method that returns a random rotation around the specified axes. It is fine if you hard-code which axes you rotate around for this exercise, but you could also pass three "),r("code",[e._v("booleans")]),e._v(" that determine for which axes a random rotation should be set.\n ")])]),e._v(" "),r("li",[r("p",[e._v("\n Next, we write the method that actually does the duplication. In it, first check whether the currently selected active object is a "),r("code",[e._v("GameObject")]),e._v(". If not, we want to execute the default behavior of Unity. You can do so with this line of code: "),r("code",[e._v('EditorApplication.ExecuteMenuItem("Edit/Duplicate");')])]),e._v(" "),r("p",[e._v("\n If the selected object is a "),e._v("GameObject"),e._v(", instantiate a new "),r("code",[e._v("GameObject")]),e._v(" that is a copy of the selected object, except for the rotation. For the rotation, we want to use a random rotation.\n ")]),e._v(" "),r("p",[e._v("\n The basic functionality itself is implemented. However, we also want to mimic behavior of Unity's default duplication. This includes setting the currently active "),e._v("GameObject"),e._v(" to the newly created "),e._v("GameObject"),e._v(" as well as registering the action to the undo list. If not registered, we can not und
1o the duplication.\n ")])])]),e._v(" "),r("p",[e._v("\n Next, in the "),r("code",[e._v("OnToolGUI")]),e._v(" method, we want to catch all events that correspond to the Unity shortcut of duplication. For now, we'll just assume that the user did not change the default keybind for duplicating (Default: "),r("code",[e._v("CTRL/CMD + D")]),e._v('). So, when the current event\'s keys contains the keys required for the duplication, we want to execute our "override" of the duplication. After that, tell the '),r("code",[e._v("EventSystem")]),e._v(" that the current event is used. Otherwise, the default duplication would be executed as well.\n ")]),e._v(" "),r("p",[e._v("\n This completes our implementation of our Unbound Rotation tool. By zipping the package file, you can distribute and install it easily via "),r("Hyperlink",{attrs:{to:"https://docs.unity3d.com/6000.0/Documentation/Manual/upm-ui-local.html"}},[e._v("the Package Manager")]),e._v(".\n ")],1),e._v(" "),r("h2",{attrs:{id:"sec:conclusion"}},[e._v("Conclusion")]),e._v(" "),r("p",[e._v("\n This tutorial gave you a short insight into tool development. We implemented a custom arcball rotation tool.\n ")]),e._v(" "),r("p",{staticClass:"comment"},[e._v("\n Note: You can find an implementation of the tool above "),r("Hyperlink",{attrs:{to:"https://github.com/dyrdadev/unbound-rotation-tool-for-unity"}},[e._v("here")]),e._v(". Also, try adding it via Git and the Package Manager. Also take note of the Licensing, Readme, and Changelog files. As mentioned in the exercise, these files are important when you want to share your own packages.\n ")],1),e._v(" "),r("h2",[e._v("References")]),e._v(" "),r("ListOfReferences",{attrs:{references:e.references}})],1)],1)],1)}),[],!1,null,"7b28cee4",null);t.default=component.exports;installComponents(component,{PaperPatch:n(357).default,WindowElement:n(356).default,Hyperlink:n(63).default,Citation:n(506).default,ListOfReferences:n(507).default,PaperPage:n(354).default,ArticleLayout:n(484).default})},function(e,t,n){"use strict";n.r(t),n.d(t,"metadata",(function(){return r}));var r={project:{identity:{title:"Memorial Punch",shortDescription:"A game jam game.",subdirectory:"memorial-punch"},categories:{values:["games"]},promotion:{icon:{source:n(740)},reel:{source:n(741),contentSize:"cover",type:"image"},gallery:{items:[{source:n(572),alt:'A screenshot of the game "Memorial Punch"',type:"image",thumbnail:{source:n(572),alt:""},title:'A screenshot of the game "Memorial Punch"',year:2024,caption:""},{source:n(573),alt:'A screenshot of the game "Memorial Punch"',type:"image",thumbnail:{source:n(573),alt:""},title:'A screenshot of the game "Memorial Punch"',year:2024,caption:""},{source:n(574),alt:'A screenshot of the game "Memorial Punch"',type:"image",thumbnail:{source:n(574),alt:""},title:'A screenshot of the game "Memorial Punch"',year:2024,caption:""},{source:n(575),alt:'A screenshot of the game "Memorial Punch"',type:"image",thumbnail:{source:n(575),alt:""},title:'A screenshot of the game "Memorial Punch"',year:2024,caption:""},{source:n(576),alt:'A screenshot of the game "Memorial Punch"',type:"image",thumbnail:{source:n(576),alt:""},title:'A screenshot of the game "Memorial Punch"',year:2024,caption:""},{source:n(577),alt:'A screenshot of the game "Memorial Punch"',type:"image",thumbnail:{source:n(577),alt:""},title:'A screenshot of the game "Memorial Punch"',year:2024,caption:""},{source:n(578),alt:'A screenshot of the game "Memorial Punch"',type:"image",thumbnail:{source:n(578),alt:""},title:'A screenshot of the game "Memorial Punch"',year:2024,caption:""}]}},preview:{priority:4,detailed:{},reel:{cardType:"bigSquare"}},abstract:{value:""},history:{in:{date:{year:2024}}},contributors:{values:[{name:{forename:"Daniel",surname:"Dyrda"},roles:{values:["developer"]}}]}}},o={name:"MemorialPunch",layout:"default",created:function(){this.metadata=r}},l=n(2),component=Object(l.a)(o,(function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("SimpleProjectLayout",{attrs:{metadata:e.metadata}},[n("PaperPage",{staticClass:"numbered-headings",attrs:{"use-with-paper-patches":""}},[n("PaperPatch",[n("p",{staticClass:"comment"},[e._v("\n These wank**s have built a memorial to him. "),n("b",[e._v("LET'S TAKE IT DOW
1N!")])]),e._v(" "),n("p",[e._v('\n "Memorial Punch" is a game I created for the '),n("Hyperlink",{attrs:{to:"/semester-game-jam"}},[e._v("Semester Game Jam")]),e._v(" during the winter semester of 2024. Memorial Punch is an arcade destruction puncher. You dash through the world and punch crates, and walls, and statues. You collect coins and increase your punch score.\n ")],1),e._v(" "),n("p",[e._v("\n I wanted to challenge myself, so I decided to participate as a solo developerâand this game is the result! I'm really proud of what I achieved in such a short time. Punching objects and dashing around feels incredibly satisfying and is genuinely a lot of fun. Even though the level design isn't great (shame on me), the experience taught me (or reminded me of) an important lesson: changing the direction of the game on the last evening before submission is not a good idea. Lessons learned! Anyway: fun game, destroyed statues, great success. And getting back into game development with Unity was also a refreshing break from the research I focus on in my day job.\n ")]),e._v(" "),n("p",[e._v("\n There's also something concrete to take away from this game jam: I built the project using the "),n("Hyperlink",{attrs:{to:"/first-person-controller-for-unity"}},[e._v("First Person Controller")]),e._v(" as a base and extended it with punching and enhanced movement abilities. I'm really pleased with how it turned out, and Iâm planning to update the "),n("Hyperlink",{attrs:{to:"/first-person-controller-for-unity"}},[e._v("First Person Controller")]),e._v(" package with these changes soon.\n ")],1)]),e._v(" "),n("WindowElement",{attrs:{"media-metadata":e.metadata.project.promotion.gallery.items,title:"Figures","hide-divider-in-feed":""}})],1)],1)}),[],!1,null,"c9e44f72",null);t.default=component.exports;installComponents(component,{Hyperlink:n(63).default,PaperPatch:n(357).default,WindowElement:n(356).default,PaperPage:n(354).default,SimpleProjectLayout:n(370).default})},function(e,t,n){"use strict";n.r(t),n.d(t,"metadata",(function(){return r}));var r={project:{identity:{title:"Toward a Game Design Engineering Process Centered on Player Experience",shortTitle:"Toward a Game Design Engineering Process Centered on PX",shortDescription:"A research paper.",hideDescriptionInDirectoryListView:!0,externalProjectUrl:"",subdirectory:"toward-a-game-design-engineering-process-centered-on-player-experience"},promotion:{icon:{source:n(742)},reel:{source:n(743),contentSize:"cover",type:"image"}},preview:{detailed:{},priority:8},categories:{values:["science","technology","design"]},types:{values:["research paper"]},history:{in:{date:{year:2025}}}}},o={name:"Index",layout:"default",created:function(){this.metadata=r}},l=n(2),component=Object(l.a)(o,(function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("SimpleScrollingLayout",{attrs:{metadata:e.metadata}},[n("p",[n("b",[e._v("Abstract:")]),e._v(" Central to a game is the player experience, a relation characterized by the indirect nature of how the experience emerges through play. This second-order design problem of games introduces a significant challenge for the game design engineering process. In this paper, we propose a model of the game design engineering process emphasizing the player experience as the primary concern. By facilitating a comparison between a system as-it-is and a system as-it-should-be, this approach has the potential to shape future endeavors for planning, validating, and refining player experience in the context of design engineering.\n ")]),e._v(" "),n("p",[n("b",[e._v("Paper:")]),e._v(" Dyrda, D., and Klinker, G. (2025). "),n("b",[e._v("Toward a Game Design Engineering Process Centered on Player Experience")]),e._v(". IEEE Conference on Games 2025.\n ")]),e._v(" "),n("p",[n("span",{staticClass:"icon subtle"},[e._v("â")]),n("b",[e._v("DOI:")]),e._v(" "),n("Hyperlink",{attrs:{to:"https://doi.org/10.1109/CoG64752.2025.11114388"}},[e._v("10.1109/CoG64752.2025.11114388")]),e._v(".\n ")],1),e._v(" "),n("p",[n("span",{staticClass:"icon subtle"},[e._v("â")]),n("b",[e._v("Published Paper:")]),e._v(" "),n("Hyperlink",{attrs:{to:"https://ieeexplore.ieee.org/document/11114388"}},[e._v("IEEE Xplore")])],1),e._v(" "),n("p",[n("span",{staticClass:"icon subtle"},[e._v("â")]),n("b",[e._v("Accepted Author Manuscript:")]),e._v(" "),n("Hyperlink",{attrs:{to:"/documents/Dyrda2025_TowardAGameDesignEngineeringProcessCenteredOnPlayerExperience.pdf","is-asset-link":""}}
1,[e._v("Document")])],1)])}),[],!1,null,null,null);t.default=component.exports;installComponents(component,{Hyperlink:n(63).default,SimpleScrollingLayout:n(368).default})},function(e,t,n){"use strict";n.r(t),n.d(t,"metadata",(function(){return r}));var r={project:{identity:{title:"Designing with Player Paths: Presenting a Game Design Framework",shortTitle:"Designing with Player Paths",shortDescription:"A research paper.",hideDescriptionInDirectoryListView:!1,externalProjectUrl:"",subdirectory:"designing-with-player-paths-presenting-a-game-design-framework"},preview:{detailed:{},priority:5},categories:{values:["science","technology","design"]},types:{values:["research paper"]},history:{in:{date:{year:2025}}}}},o={name:"Index",layout:"default",created:function(){this.metadata=r}},l=n(2),component=Object(l.a)(o,(function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("SimpleScrollingLayout",{attrs:{metadata:e.metadata}},[n("p",[n("b",[e._v("Abstract:")]),e._v(" Player paths are a central design paradigm game designers use for video games. However, keeping track of all designed player paths during development is difficult. This paper proposes a framework that supports developers who use player paths as a central design paradigm. To do so, we look at the definitions of common terms regarding player paths and analyze current workflows used in the video game industry by analyzing presentations at game development conferences. By doing so, we can ensure that our proposed framework uses knowledge from both practitioners and scholars to bridge the gap between them. The framework is based on the usage of graphs and is entirely independent of the functionality of the graph in the video game, ensuring maximal flexibility for the developers. The framework uses features available in game engines, making it possible to use in any development environment. Last, we also demonstrate the tool's functionality via a prototype of the framework in Unity.\n ")]),e._v(" "),n("p",[n("b",[e._v("Paper:")]),e._v(" Schacherbauer, M., and Dyrda, D. (2025). "),n("b",[e._v("Designing with Player Paths: Presenting a Game Design Framework")]),e._v(". IEEE Conference on Games 2025.\n ")]),e._v(" "),n("p",[n("span",{staticClass:"icon subtle"},[e._v("â")]),n("b",[e._v("DOI:")]),e._v(" "),n("Hyperlink",{attrs:{to:"https://doi.org/10.1109/CoG64752.2025.11114252"}},[e._v("10.1109/CoG64752.2025.11114252")]),e._v(".\n ")],1),e._v(" "),n("p",[n("span",{staticClass:"icon subtle"},[e._v("â")]),n("b",[e._v("Published Paper:")]),e._v(" "),n("Hyperlink",{attrs:{to:"https://ieeexplore.ieee.org/document/11114252"}},[e._v("IEEE Xplore")])],1),e._v(" "),n("p",[n("span",{staticClass:"icon subtle"},[e._v("â")]),n("b",[e._v("Accepted Author Manuscript:")]),e._v(" "),n("Hyperlink",{attrs:{to:"/documents/Schacherbauer2025_DesigningWithPlayerPathsPresentingAGameDesignFramework.pdf","is-asset-link":""}},[e._v("Document")])],1)])}),[],!1,null,null,null);t.default=component.exports;installComponents(component,{Hyperlink:n(63).default,SimpleScrollingLayout:n(368).default})},function(e,t,n){"use strict";n.r(t),n.d(t,"metadata",(function(){return r}));var r={project:{identity:{title:"Play x Discuss: A Digital Cooperative Discussion Game About Women in Science",shortTitle:"Play x Discuss: Women in Science - Paper",shortDescription:"A research paper.",hideDescriptionInDirectoryListView:!1,externalProjectUrl:"",subdirectory:"play-x-discuss-a-digital-cooperative-discussion-game-about-women-in-science"},preview:{detailed:{},priority:5},categories:{values:["science","technology","design"]},types:{values:["research paper"]},history:{in:{date:{year:2025}}}}},o={name:"Index",layout:"default",created:function(){this.metadata=r}},l=n(2),component=Object(l.a)(o,(function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("SimpleScrollingLayout",{attrs:{metadata:e.metadata}},[n("p",[n("b",[e._v("Abstract:")]),e._v(" This paper presents a design approach for educational games that use structured peer discussion as a primary game mechanic to address the complex, context-dependent challenges faced by women in STEM. We introduce Play x Discuss: Women in Science, a digital multiplayer game developed through a human-centered, co-design process involving women scientists from diverse backgrounds. Combining interactive storytelling with collaborative discussion, the game creates a safe, inclusive space for players to reflect on real-world experiences, share strategies, and build community. The resulting game offers a replicable model for designing educational games that foster critical thinking and social connection around key themes of Diversity, Equity, and Inclusion.\n ")]),e._v(" "),n("p",[n("b",[e._v("Paper:")]),e._v(" Bika, C., Narasimhan, S., Barth, J., Klinker, G., and Dyrda, D. (2025). "),n("b",[e._v("Play x Discuss: A Digital Cooperative Discussion Game About Women in Science")]),e._v(". IEEE Conference on Games 2025.\n ")]),e._v(" "),n("p",[n("span",{staticClass:"icon subtle"},[e._v("â")]),e._v(" "),n("b",[e._v("DOI:")]),e._v(" "),n("Hyperlink",{attrs:{to:"https://doi.org/10.1109/CoG64752.2025.11114385"}},[e._v("10.1109/CoG64752.2025.11114385")]),e._v(".\n ")],1),e._v(" "),n("p",[n("span",{staticClass:"icon subtle"},[e._v("â")]),e._v(" "),n("b",[e._v("Published Paper:")]),e._v(" "),n("Hyperlink",{attrs:{to:"https://ieeexplore.ieee.org/document/11114385"}},[e._v("IEEE Xplore")])],1),e._v(" "),n("p",[n("span",{staticClass:"icon subtle"},[e._v("â")]),e._v(" "),n("b",[e._v("Accepted Author Manuscript:")]),e._v(" "),n("Hyperlink",{attrs:{to:"/documents/Bika2025_PlayXDiscussADigitalCooperativeDiscussionGameAboutWomenInScience.pdf","is-asset-link":""}}
1,[e._v("Document")])],1),e._v(" "),n("p",[n("span",{staticClass:"icon subtle"},[e._v("â")]),e._v(" "),n("b",[e._v("Game Project:")]),e._v(" You can find more about the game project here: "),n("Hyperlink",{attrs:{to:"/play-discuss-women-in-science"}},[e._v("\n game project page\n ")]),e._v(".\n ")],1)])}),[],!1,null,null,null);t.default=component.exports;installComponents(component,{Hyperlink:n(63).default,SimpleScrollingLayout:n(368).default})},function(e,t,n){"use strict";n.r(t),n.d(t,"metadata",(function(){return r}));var r={project:{identity:{title:"Toward a Unified Spatial Interface for Controlling Procedural Content Generation",shortTitle:"Toward a Unified Spatial Interface for PCG",shortDescription:"A research paper.",hideDescriptionInDirectoryListView:!1,externalProjectUrl:"",subdirectory:"toward-a-unified-spatial-interface-for-controlling-procedural-content-generation"},preview:{detailed:{},priority:5},categories:{values:["science","technology","design"]},types:{values:["research paper"]},history:{in:{date:{year:2025}}}}},o={name:"Index",layout:"default",created:function(){this.metadata=r}},l=n(2),component=Object(l.a)(o,(function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("SimpleScrollingLayout",{attrs:{metadata:e.metadata}},[n("p",[n("b",[e._v("Abstract:")]),e._v(" Procedural Content Generation (PCG) is central to modern game development, where structured data input and controllability are critical to achieving high-quality, diverse, and context-aware results. This paper proposes a unified spatial interface for controlling PCG based on the Space Foundation System (SFS). By extending the SFS location graph with hierarchical organization and semantic attributes, we provide a shared spatial interface for diverse PCG systems. To integrate existing algorithms, we propose Data Transformersâmodular components that translate location graph data into algorithm-specific parameters. We demonstrate the frameworkâs applicability through three implemented scenarios in the context of asset placement for environmental generation. Our results highlight the potential of the SFS to streamline PCG workflows, enhance modularity, and support both automated and designer-driven content creation. This work contributes a step toward a unified spatial interface for PCG in games.\n ")]),e._v(" "),n("p",[n("b",[e._v("Paper:")]),e._v(" Bunke, A., and Dyrda, D. (2025). "),n("b",[e._v("Toward a Unified Spatial Interface for Controlling Procedural Content Generation")]),e._v(". IEEE Conference on Games 2025.\n ")]),e._v(" "),n("p",[n("span",{staticClass:"icon subtle"},[e._v("â")]),n("b",[e._v("DOI:")]),e._v(" "),n("Hyperlink",{attrs:{to:"https://doi.org/10.1109/CoG64752.2025.11114190"}},[e._v("10.1109/CoG64752.2025.11114190")]),e._v(".\n ")],1),e._v(" "),n("p",[n("span",{staticClass:"icon subtle"},[e._v("â")]),n("b",[e._v("Published Paper:")]),e._v(" "),n("Hyperlink",{attrs:{to:"https://ieeexplore.ieee.org/document/11114190"}},[e._v("IEEE Xplore")])],1),e._v(" "),n("p",[n("span",{staticClass:"icon subtle"},[e._v("â")]),n("b",[e._v("Accepted Author Manuscript:")]),e._v(" "),n("Hyperlink",{attrs:{to:"/documents/Bunke2025_TowardAUnifiedSpatialInterfaceForControllingProceduralContentGeneration.pdf","is-asset-link":""}},[e._v("Document")])],1)])}),[],!1,null,null,null);t.default=component.exports;installComponents(component,{Hyperlink:n(63).default,SimpleScrollingLayout:n(368).default})},function(e,t,n){"use strict";n.r(t),n.d(t,"metadata",(function(){return r}));var r={project:{identity:{title:"ZEER: A Spatial Task Management Tool for Game Development",shortTitle:"A Spatial Task Management Tool for Game Development",shortDescription:"A research paper.",hideDescriptionInDirectoryListView:!1,externalProjectUrl:"",subdirectory:"zeer-a-spatial-task-management-tool-for-game-development"},preview:{detailed:{},priority:5},categories:{values:["science","technology","design"]},types:{values:["research paper"]},history:{in:{date:{year:2025}}}}},o={name:"Index",layout:"default",created:function(){this.metadata=r}},l=n(2),component=Object(l.a)(o,(function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("SimpleScrollingLayout",{attrs:{metadata:e.metadata}},[n("p",[n("b",[e._v("Abstract:")]),e._v(" The development of video games presents unique challenges in task management, particularly due to the spatial nature of many tasks related to spatial domains such as level design and world-building. While sufficient for general softw
1are projects, traditional task management tools lack the ability to represent and manage tasks with explicit spatial context within a three-dimensional (3D) game environment. This paper explores spatial task management as a missing link in current workflows and introduces ZEER, a custom Unity tool that connects the Unity game engine with task databases created in Notion. ZEER enables the creation, visualization, navigation, and management of tasks directly within the 3D game environment, leveraging spatial metadata to reduce context-switching and enhance workflow clarity. The tool serves as a proof-of-concept for integrating spatial task management into development environments and contributes a replicable approach toward more intuitive and context-rich task management in game development.\n ")]),e._v(" "),n("p",[n("b",[e._v("Paper:")]),e._v(" Landvogt, J., and Dyrda, D. (2025). "),n("b",[e._v("ZEER: A Spatial Task Management Tool for Game Development")]),e._v(". SKILL Conference 2025.\n ")])])}),[],!1,null,null,null);t.default=component.exports;installComponents(component,{SimpleScrollingLayout:n(368).default})},function(e,t,n){"use strict";n.r(t),n.d(t,"metadata",(function(){return r}));var r={project:{identity:{title:"Towards a Unified System for Controlling Aesthetics in Video Games Using Graph-Based Spatial Models",shortTitle:"Towards a Unified System for Controlling Aesthetics in Video Games",shortDe
1scription:"A research paper.",hideDescriptionInDirectoryListView:!0,externalProjectUrl:"",subdirectory:"towards-a-unified-system-for-controlling-aesthetics-in-video-games-using-graph-base-spatial-models"},preview:{detailed:{},priority:5},categories:{values:["science","technology","design"]},types:{values:["research paper"]},history:{in:{date:{year:2025}}}}},o={name:"Index",layout:"default",created:function(){this.metadata=r}},l=n(2),component=Object(l.a)(o,(function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("SimpleScrollingLayout",{attrs:{metadata:e.metadata}},[n("p",[n("b",[e._v("Abstract:")]),e._v(" This paper presents a unified system for aesthetics control in video games, addressing two key challenges: the lack of structured spatial models for triggering aesthetics changes and the fragmentation of aesthetics subsystems across independent components. Building on the Space Foundation System (SFS), a graph-based abstraction of game space, our system enables designers to assign and transition between Aesthetics Profiles in a semantically meaningful way. It unifies the control of diverse modalitiesâincluding lighting, audio, and post-processingâwithin a coordinated framework. We provide a concept for the general system architecture, present a concrete implementation in the Unity game engine, and demonstrate the systemâs usability and expressiveness through a fully functional demo scene.\n ")]),e._v(" "),n("p",[n("b",[e._v("Paper:")]),e._v(" Hemming, P., and Dyrda, D. (2025). "),n("b",[e._v("Towards a Unified System for Controlling Aesthetics in Video Games Using Graph-Based Spatial Models")]),e._v(". SKILL Conference 2025.\n ")])])}),[],!1,null,null,null);t.default=component.exports;installComponents(component,{SimpleScrollingLayout:n(368).default})},function(e,t,n){"use strict";n.r(t),n.d(t,"metadata",(function(){return r}));var r={project:{identity:{title:"A Time- and Space-Efficient Adaptation of the Space Foundation System for Digital Games",shortTitle:"A Time- and Space-Efficient Adaptation of the Space Foundation System",shortDescription:"A research paper.",hideDescriptionInDirectoryListView:!0,externalProjectUrl:"https://dl.acm.org/doi/10.1145/3769047.3769056",subdirectory:"a-time-and-space-efficient-adaptation-of-the-space-foundation-system-for-digital-games"},preview:{detailed:{},priority:6},categories:{values:["science","technology"]},types:{values:["research paper"]},history:{in:{date:{year:2025}}}}},o={name:"Index",layout:"default",created:function(){this.metadata=r}},l=n(2),component=Object(l.a)(o,(function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("SimpleScrollingLayout",{attrs:{metadata:e.metadata}},[n("p",[n("b",[e._v("Abstract:")]),e._v(" This paper presents a time- and space-efficient adaptation of the Space Foundation System, a novel game engine system that abstracts space into semantic locations to bridge the gap between the implementation domain and the problem domain of spatial features in digital games. The presented algorithm discretizes the game space by employing a frontier-based flood fill on a voxel grid to partition the space into locations defined by anchors bounded by delimiters. Integrated into a game engine via extended Transform components, the system enables location queries and supports advanced spatial game features in real time. An evaluation across diverse game environments demonstrates that the algorithm meets practical development requirements regarding computation time and memory usage. The results suggest that the system offers a viable, design-oriented extension to traditional scene graphs.\n ")]),e._v(" "),n("p",[n("b",[e._v("Paper:")]),e._v(" Dyrda, D., Pfaffinger, K., Belloni, C., Schacherbauer, M., Pirker, J., and Klinker, G. (2025). "),n("b",[e._v("A Time- and Space-Efficient Adaptation of the Space Foundation System for Digital Games")]),e._v(". Proceedings of the 2025 18th ACM SIGGRAPH Conference on Motion, Interaction, and Game.\n ")]),e._v(" "),n("p",[n("span",{staticClass:"icon subtle"},[e._v("â")]),n("b",[e._v("DOI:")]),e._v(" "),n("Hyperlink",{attrs:{to:"https://doi.org/10.1145/3769047.3769056"}},[e._v("10.1145/3769047.3769056")]),e._v(".\n ")],1),e._v(" "),n("p",[n("span",{staticClass:"icon subtle"},[e._v("â")]),n("b",[e._v("Published Paper:")]),e._v(" "),n("Hyperlink",{attrs:{to:"https://dl.acm.org/doi/10.1145/3769047.3769056"}},[e._v("ACM Digital Library")])],1),e._v(" "),n("p",[n("span",{staticClass:"icon subtle"},[e._v("â")]),n("b",[e._v("Manuscript:")]),e._v(" "),n("Hyperlink",{attrs:{to:"https://dl.acm.org/doi/10.1145/3769047.3769056"}},[e._v("Full Paper")])],1)])}),[],!1,null,null,null);t.default=component.exports;installComponents(component,{Hyperlink:n(63).default,SimpleScrollingLayout:n(368).default})},function(e,t,n){"use strict";n.r(t),n.d(t,"metadata",(function(){return r}));var r={project:{identity:{title:"How Do I Implement It? Towards Software Patterns for Accessible Player Experience",shortTitle:"How Do I Implement It? Towards Software Patterns for Accessible PX",shortDe
1scription:"A research poster.",hideDescriptionInDirectoryListView:!0,externalProjectUrl:"https://mig.siggraph.org/2025/program/",subdirectory:"how-do-i-implement-it_towards-software-patterns-for-accessible-player-experience"},preview:{detailed:{},priority:5},categories:{values:["science","technology","design"]},types:{values:["research poster"]},history:{in:{date:{year:2025}}}}},o={name:"Index",layout:"default",created:function(){this.metadata=r}},l=n(2),component=Object(l.a)(o,(function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("SimpleScrollingLayout",{attrs:{metadata:e.metadata}},[n("p",[e._v("\n This poster proposes an approach to support the implementation of accessible game design patterns. It examines the Accessible Player Experience (APX) Design Patterns developed by the AbleGamers Charity from a technical perspective and presents our approach to supporting the implementation of these patterns as software solutions. Our aim is to advance accessibility in digital games by supporting developers with practical tools and guidance. To this end, we explore multiple pathways for integrationâranging from ready-to-use implementations and frameworks to plugins and tailored adviceâhelping developers seamlessly embed accessibility features into their games.\n ")]),e._v(" "),n("p",[e._v('\n The poster presentation was awarded the "Best Poster Award" at MIG\'25.\n ')]),e._v(" "),n("p",[n("b",[e._v("Poster Presentation:")]),e._v(" Bika, C., Pfaffinger, K., Dyrda, D., Schacherbauer, M., and Pirker, J. (2025). "),n("b",[e._v("How Do I Implement It? Towards Software Patterns for Accessible Player Experience")]),e._v(". Poster presented at the 18th ACM SIGGRAPH Conference on Motion, Interaction, and Game 2025.\n ")]),e._v(" "),n("p",[n("span",{staticClass:"icon subtle"},[e._v("â")]),n("b",[e._v("Poster Document:")]),e._v(" "),n("Hyperlink",{attrs:{to:"/documents/Bika2025_HowDoIImplementIt.pdf","is-asset-link":""}},[e._v("Document")])],1),e._v(" "),n("p",[n("span",{staticClass:"icon subtle"},[e._v("â")]),n("b",[e._v("Poster:")]),e._v(" "),n("Hyperlink",{attrs:{to:"/documents/Bika2025_HowDoIImplementIt_Poster.pdf","is-asset-link":""}},[e._v("Poster as PDF")])],1),e._v(" "),n("p",[n("span",{staticClass:"icon subtle"},[e._v("â")]),n("b",[e._v("MIG'25 Program:")]),e._v(" "),n("Hyperlink",{attrs:{to:"https://mig.siggraph.org/2025/program/"}},[e._v("Conferenc Web Page")])],1)])}),[],!1,null,null,null);t.default=component.exports;installComponents(component,{Hyperlink:n(63).default,SimpleScrollingLayout:n(368).default})},function(e,t,n){"use strict";n.r(t),n.d(t,"metadata",(function(){return r}));var r={project:{identity:{title:"Understanding Player Movement in 3D Action-Adventure Games: From Mechanics to Implementation",shortTitle:"Understanding Player Movement in Games",shortDe
1scription:"A research paper.",hideDescriptionInDirectoryListView:!1,externalProjectUrl:"",subdirectory:"understanding-player-movement-in-3d-action-adventure-games-from-mechanics-to-implementation"},preview:{detailed:{},priority:6},categories:{values:["science","technology","design"]},types:{values:["research paper"]},history:{in:{date:{year:2026}}}}},o={name:"Index",layout:"default",created:function(){this.metadata=r}},l=n(2),component=Object(l.a)(o,(function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("SimpleScrollingLayout",{attrs:{metadata:e.metadata}},[n("p",[n("b",[e._v("Abstract:")]),e._v(" Modern video games exhibit increasingly complex player movement systems, while accessible and well-structured resources on their underlying implementation remain limited. This paper addresses this gap by analyzing player movement in contemporary 3D action-adventure games. We conduct a comparative study of 20 critically acclaimed titles, identifying 37 distinct movement mechanics and using state counts as a coarse measure of controller complexity. Building on this empirical analysis, we relate observed mechanics to established implementation paradigms drawn from both academic literature and industry practice. By connecting gameplay features to system design strategies, this work contributes to understanding and designing player movement systems.\n ")]),e._v(" "),n("p",[n("b",[e._v("Reference:")]),e._v(" Tobias Florian Heller and Daniel Dyrda. 2026. Understanding Player Movement in 3D Action-Adventure Games: From Mechanics to Implementation. In Foundations of Digital Games (FDG â26), August 10â13, 2026, Copenhagen, Denmark. ACM, New York, NY, USA, 4 pages. "),n("Hyperlink",{attrs:{to:"https://doi.org/10.1145/3815598.3815685"}},[e._v("https://doi.org/10.1145/3815598.3815685")])],1)])}),[],!1,null,null,null);t.default=component.exports;installComponents(component,{Hyperlink:n(63).default,SimpleScrollingLayout:n(368).default})},function(e,t,n){"use strict";n.r(t),n.d(t,"metadata",(function(){return r}));var r={project:{identity:{title:"Creating Memorable Player Experiences Through Level Design: A Case Study of Elden Ring's Siofra River Well Elevator Scene",shortTitle:"A Case Study of Elden Ring's Siofra River Well Elevator Scene",shortDescription:"A research paper.",hideDescriptionInDirectoryListView:!0,externalProjectUrl:"",subdirectory:"creating-memorable-player-experiences-through-level-design-a-case-study-of-elden-rings-siofra-river-well-elevator-scene"},preview:{detailed:{},priority:6},categories:{values:["science","technology","design"]},types:{values:["research paper"]},history:{in:{date:{year:2026}}}}},o={name:"Index",layout:"default",created:function(){this.metadata=r}},l=n(2),component=Object(l.a)(o,(function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("SimpleScrollingLayout",{attrs:{metadata:e.metadata}},[n("p",[n("b",[e._v("Abstract:")]),e._v(" Player experience in digital games emerges from the interplay between design and psychological responses, often producing memorable moments. This paper presents a qualitative case study of the "),n("i",[e._v("Siofra River Well")]),e._v(" elevator scene in "),n("i",[e._v("Elden Ring")]),e._v(" ("),n("i",[e._v("FromSoftware")]),e._v(", 2022), examining how level design shapes memorability. Combining structural analysis of the environment with observations of player behavior, we show how spatial guidance, pacing, and staged revelation create a sequence of curiosity, anticipation, and awe. We outline a candidate design pattern capturing these interactions, offering designers a structured reference for crafting similarly memorable player experiences.\n ")]),e._v(" "),n("p",[n("b",[e._v("Reference:")]),e._v(" Ismail Adiyaman, Chrysa Bika, and Daniel Dyrda. 2026. Creating Memorable Player Experiences Through Level Design: A Case Study of Elden Ringâs Siofra River Well Elevator Scene. In Foundations of Digital Games (FDG â26), August 10â13, 2026, Copenhagen, Denmark. ACM, New York, NY, USA, 4 pages. "),n("Hyperlink",{attrs:{to:"https://doi.org/10.1145/3815598.3815691"}},[e._v("https://doi.org/10.1145/3815598.3815691")])],1)])}),[],!1,null,null,null);t.default=component.exports;installComponents(component,{Hyperlink:n(63).default,SimpleScrollingLayout:n(368).default})},function(e,t,n){"use strict";n.r(t),n.d(t,"metadata",(function(){return r}));var r={project:{identity:{title:"LLMs are the Ideal Candidate for Mixed-Initiative Game Design Pillar Workflows",shortTitle:"LLMs for Mixed-Initiative Game Design Pillar Workflows",shortDe
1scription:"A research paper.",hideDescriptionInDirectoryListView:!0,externalProjectUrl:"",subdirectory:"llms-are-the-ideal-candidate-for-mixed-initiative-game-design-pillar-workflows"},preview:{detailed:{},priority:6},categories:{values:["science","technology","design"]},types:{values:["research paper"]},history:{in:{date:{year:2026}}}}},o={name:"Index",layout:"default",created:function(){this.metadata=r}},l=n(2),component=Object(l.a)(o,(function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("SimpleScrollingLayout",{attrs:{metadata:e.metadata}},[n("p",[n("b",[e._v("Abstract:")]),e._v(" Game Design Pillars are natural language artifacts commonly used in game development to communicate a projectâs core vision and ensure a coherent player experience. Their linguistic nature aligns well with the strengths of Large Language Models (LLMs), which excel at generating and interpreting natural language, making them strong candidates for supporting mixed-initiative workflows centered on design pillars. In this study, we introduce a formal definition of game design pillars, present an initial prototypeâSPINEâand investigate the utility of LLMs in the creation and decision-making processes associated with pillar-driven workflows. We begin with a pre-study to identify an appropriate model, comparing gemini-2.0-flash and GPT-4o-mini. Results show that Gemini is better suited to our tasks due to its greater output variety and consistency. We then conduct a case study by deploying the tool at a local game jam. Findings indicate positive reception and clear value in integrating SPINE into early-stage development. Finally, we interview four experts, demonstrating the tool and allowing them to experiment with it in a controlled environment. While individual perspectives vary, the overall perception is encouraging and supports our intuition: LLMs can meaningfully contribute to game design pillar workflows. These early findings highlight the potential of formalizing pillar-driven design as a research space and point toward several promising avenues for future work.\n ")]),e._v(" "),n("p",[n("b",[e._v("Reference:")]),e._v(" Julian Geheeb, Marvin Julian Schwarz, Daniel Dyrda, and Georg Groh. 2026. LLMs are the Ideal Candidate for Mixed-Initiative Game Design Pillar Workflows. In Foundations of Digital Games (FDG â26), August 10â13, 2026, Copenhagen, Denmark. ACM, New York, NY, USA, 16 pages. "),n("Hyperlink",{attrs:{to:"https://doi.org/10.1145/3815598.3815653"}},[e._v("https://doi.org/10.1145/3815598.3815653")])],1)])}),[],!1,null,null,null);t.default=component.exports;installComponents(component,{Hyperlink:n(63).default,SimpleScrollingLayout:n(368).default})},function(e,t,n){"use strict";n.r(t),n.d(t,"metadata",(function(){return r}));var r={project:{identity:{title:"Game Design Pillars: Between Concept and Practice",shortTitle:"Game Design Pillars: Concept and Practice",shortDescription:"A research paper.",hideDescriptionInDirectoryListView:!1,externalProjectUrl:"",subdirectory:"game-design-pillars-between-concept-and-practice"},preview:{detailed:{},priority:7},categories:{values:["science","technology","design"]},types:{values:["research paper"]},history:{in:{date:{year:2026}}}}},o={name:"Index",layout:"default",created:function(){this.metadata=r}},l=n(2),component=Object(l.a)(o,(function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("SimpleScrollingLayout",{attrs:{metadata:e.metadata}},[n("p",[n("b",[e._v("Abstract:")]),e._v(" Design pillars are widely used in game development as high-level principles that define the intended player experience and guide design decisions. Despite their prevalence in industry practice, their role remains underexplored in academic literature. This paper provides a structured description of design pillars and investigates their use through an exploratory questionnaire study with game developers. The results show that design pillars are well understood and commonly used to support early design decisions and team alignment. However, their application is often inconsistent, declines over the course of development, and is challenged by vagueness, difficulty in operationalization, and insufficient documentation. These findings reveal a gap between the conceptual role of design pillars and their practical use. We discuss implications for game design practice and outline directions for future work toward more structured, player-experience-oriented design processes.\n ")]),e._v(" "),n("p",[n("b",[e._v("Reference:")]),e._v(" Daniel Dyrda, Felipe Wink Rodrigues Lucas, Martin Schacherbauer, Chrysa Bika, Julian Geheeb, and Johanna Pirker. 2026. Game Design Pillars: Between Concept and Practice. In Foundations of Digital Games (FDG â26), August 10â13, 2026, Copenhagen, Denmark. ACM, New York, NY, USA, 4 pages. "),n("Hyperlink",{attrs:{to:"https://doi.org/10.1145/3815598.3815686"}},[e._v("https://doi.org/10.1145/3815598.3815686")])],1)])}),[],!1,null,null,null);t.default=component.exports;installComponents(component,{Hyperlink:n(63).default,SimpleScrollingLayout:n(368).default})},function(e,t,n){"use strict";n.r(t),n.d(t,"metadata",(function(){return r}));var r={project:{identity:{title:"The Pacing Diagram: A Step Toward a Shared Player Experience Language for Game Design",shortTitle:"The Pacing Diagram: A Step Toward a PX Language",shortDe
1scription:"A research paper.",hideDescriptionInDirectoryListView:!1,externalProjectUrl:"",subdirectory:"the-pacing-diagram-a-step-toward-a-shared-player-experience-language-for-game-design"},preview:{detailed:{},priority:7},categories:{values:["science","technology","design"]},types:{values:["research paper"]},history:{in:{date:{year:2026}}}}},o={name:"Index",layout:"default",created:function(){this.metadata=r}},l=n(2),component=Object(l.a)(o,(function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("SimpleScrollingLayout",{attrs:{metadata:e.metadata}},[n("p",[n("b",[e._v("Abstract:")]),e._v(" Pacing diagrams are used in game design practice to represent player experience as a temporal structure. However, the term currently refers to heterogeneous and informal artifacts, limiting both interdisciplinary communication and computational use. We propose a minimal formal reference description of pacing diagrams for linear player experience sequences. The contribution defines the core structural elements of the diagram and frames pacing diagrams as both communicative design artifacts and structured representations. This formalization provides a shared point of reference for design practice while enabling consistent interpretation by tools and computational systems. As a first step, it establishes a foundation for more comparable, interoperable, and analyzable representations of player experience in game design.\n ")]),e._v(" "),n("p",[n("b",[e._v("Reference:")]),e._v(" Daniel Dyrda, Julian Geheeb, Martin Schacherbauer, Johanna Pirker, and Gudrun Klinker. 2026. The Pacing Diagram: A Step Toward a Shared Player Experience Language for Game Design. In Foundations of Digital Games (FDG â26), August 10â13, 2026, Copenhagen, Denmark. ACM, New York, NY, USA, 4 pages. "),n("Hyperlink",{attrs:{to:"https://doi.org/10.1145/3815598.3815683"}},[e._v("https://doi.org/10.1145/3815598.3815683")])],1)])}),[],!1,null,null,null);t.default=component.exports;installComponents(component,{Hyperlink:n(63).default,SimpleScrollingLayout:n(368).default})},function(e,t,n){"use strict";n.r(t);n(64);
1var r={name:"ProjectReelCard",props:{title:{type:String},to:{type:String},description:{type:String},reel:{type:Object},sizeFactor:{type:Number,default:1},contentSize:{type:String}},computed:{media:function(){return{source:this.reel.source,fallbackSource:this.reel.fallbackSource,poster:this.reel.poster,type:this.reel.type,alt:"Preview of project"+this.title,title:this.title,description:this.description}}}},o=n(744),l=n(2);var component=Object(l.a)(r,(function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("Hyperlink",{attrs:{to:e.to,"do-not-apply-styling":""}},[n("InteractiveCard",{attrs:{"size-factor":e.sizeFactor,"kinesis-strength":12/e.sizeFactor}},[n("MediaInteractionGateLayer",{attrs:{"media-metadata":e.media}},[n("HoverOverlayLayer",{scopedSlots:e._u([{key:"hover-overlay",fn:function(){return[n("Hyperlink",{attrs:{to:e.to,"do-not-apply-styling":""}},[n("div",{staticClass:"layer",class:e.$style.container},[n("MediaInformation",{attrs:{"media-metadata":e.media}})],1)])]},proxy:!0},{key:"content",fn:function(){return[n("div",{staticClass:"layer"},[n("MediaAsset",{attrs:{"media-metadata":e.media}})],1)]},proxy:!0}])})],1)],1)],1)}),[],!1,(function(e){this.$style=o.default.locals||o.default}),"d9a20a1e",null);t.default=component.exports;installComponents(component,{MediaInformation:n(434).default,Hyperlink:n(63).default,MediaAsset:n(433).default,HoverOverlayLayer:n(428).default,MediaInteractionGateLayer:n(432).default,InteractiveCard:n(385).default})},,,function(e,t,n){"use strict";n(218)("big",(function(e){return function(){return e(this,"big","","")}}))},function(e,t,n){e.exports=n.p+"img/dyrda-page_icon.79d0af7.png"},function(e,t,n){e.exports=n.p+"img/dyrda-dev_icon.c9252d6.png"},function(e,t,n){e.exports=n.p+"img/another-thesis-guide_icon.3cdf29e.png"},function(e,t,n){e.exports=n.p+"img/privacy-by-design_icon.2df8312.png"},function(e,t,n){e.exports=n.p+"img/placeholder.8632754.jpg"},function(e,t,n){"use strict";var r=n(496),o=n.n(r);n.d(t,"default",(function(){return o.a}))},function(e,t,n){var r=n(3)(!1);r.push([e.i,"[data-v-1fcbb79b]:export{zIndexForeground:600;zIndexBase:0;zIndexBackground:-300;zIndexBackdrop:300;zIndexPage:1300;zindexSecondaryNavigation:3300;zIndexPrimaryNavigation:4300;zIndexCurtain:5300;zIndexFullScreenFeatures:6300;zIndexModals:7300;zIndexNotifications:8300;zIndexBlocker:9300;sm:640;md:768;lg:1024;xl:1280;xxl:1736;vLg:900}.frame--\\[Frida\\]_0uw4[data-v-1fcbb79b]{--units-per-row:2;width:100%;max-width:min(var(--max-width-wide),calc(100vw - calc(var(--page-spacing) * 2)));margin-top:unset;margin-bottom:unset;padding-bottom:var(--page-bottom-margin)}@media(min-width:768px){.frame--\\[Frida\\]_0uw4[data-v-1fcbb79b]{--units-per-row:3}}@media(min-width:1280px){.frame--\\[Frida\\]_0uw4[data-v-1fcbb79b]{--units-per-row:5}}.frame--\\[Frida\\]_0uw4.xl--\\[Frida\\]_XLYV[data-v-1fcbb79b]{margin-top:var(--page-top-margin)}.coverWrapper--\\[Frida\\]_hizH[data-v-1fcbb79b]{margin-bottom:max(calc(var(--grid-spacing) * 1),var(--page-cover-magic-spacing))}.grid--\\[Frida\\]_sORc[data-v-1fcbb79b]{width:100%;display:grid;grid-template-columns:repeat(var(--units-per-row),calc(calc(min(var(--max-width-wide), calc(100vw - calc(var(--page-spacing) * 2))) - calc(calc(var(--units-per-row) - 1) * var(--grid-spacing))) / var(--units-per-row)));grid-template-rows:repeat(var(--number-of-rows),calc(calc(min(var(--max-width-wide), calc(100vw - calc(var(--page-spacing) * 2))) - calc(calc(var(--units-per-row) - 1) * var(--grid-spacing))) / var(--units-per-row)));grid-auto-flow:dense;grid-gap:var(--grid-spacing);padding:0;margin-bottom:5px}.header-item--\\[Frida\\]_IWG8[data-v-1fcbb79b]{grid-area:1/1/3/3}.listItem--\\[Frida\\]_ZPoP[data-v-1fcbb79b]{width:calc(calc(min(var(--max-width-wide), calc(100vw - calc(var(--page-spacing) * 2))) - calc(calc(var(--units-per-row) - 1) * var(--grid-spacing))) / var(--units-per-row));height:calc(calc(min(var(--max-width-wide), calc(100vw - calc(var(--page-spacing) * 2))) - calc(calc(var(--units-per-row) - 1) * var(--grid-spacing))) / var(--units-per-row))}.listItem--\\[Frida\\]_ZPoP.bigSquare--\\[Frida\\]_H96W[data-v-1fcbb79b]{height:calc(calc(calc(calc(min(var(--max-width-wide), calc(100vw - calc(var(--page-spacing) * 2))) - calc(calc(var(--units-per-row) - 1) * var(--grid-spacing))) / var(--units-per-row)) * 2) + var(--grid-spacing));grid-row-end:span 2}.listItem--\\[Frida\\]_ZPoP.bigSquare--\\[Frida\\]_H96W[data-v-1fcbb79b],.listItem--\\[Frida\\]_ZPoP.horizontalRectangle--\\[Frida\\]_R7gM[data-v-1fcbb79b]{width:calc(calc(calc(calc(min(var(--max-width-wide), calc(100vw - calc(var(--page-spacing) * 2))) - calc(calc(var(--units-per-row) - 1) * var(--grid-spacing))) / var(--units-per-row)) * 2) + var(--grid-spacing));grid-column-end:span 2}.listItem--\\[Frida\\]_ZPoP.horizontalRectangle--\\[Frida\\]_R7gM[data-v-1fcbb79b]{height:calc(calc(min(var(--max-width-wide), calc(100vw - calc(var(--page-spacing) * 2))) - calc(calc(var(--units-per-row) - 1) * var(--grid-spacing))) / var(--units-per-row))}.listItem--\\[Frida\\]_ZPoP.verticalRectangle--\\[Frida\\]_OYOg[data-v-1fcbb79b]{width:calc(calc(min(var(--max-width-wide), calc(100vw - calc(var(--page-spacing) * 2))) - calc(calc(var(--units-per-row) - 1) * var(--grid-spacing))) / var(--units-per-row));height:calc(calc(calc(calc(min(var(--max-width-wide), calc(100vw - calc(var(--page-spacing) * 2))) - calc(calc(var(--units-per-row) - 1) * var(--grid-spacing))) / var(--units-per-row)) * 2) + var(--grid-spacing));grid-row-end:span 2}",""]),r.locals={frame:"frame--[Frida]_0uw4",xl:"xl--[Frida]_XLYV",coverWrapper:"coverWrapper--[Frida]_hizH",grid:"grid--[Frida]_sORc","header-item":"header-item--[Frida]_IWG8",listItem:"listItem--[Frida]_ZPoP",bigSquare:"bigSquare--[Frida]_H96W",horizontalRectangle:"horizontalRectangle--[Frida]_R7gM",verticalRectangle:"verticalRectangle--[Frida]_OYOg"},e.exports=r},,,function(e,t,n){"use strict";n.r(t);n(26),n(23),n(31),n(38),n(39);var r=n(18),o=(n(159),n(826),n(601),n(854)),l=n(746),c={name:"InclusionAndDiversity",layout:"linear"},d=n(2),component=Object(d.a)(c,(function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",[n("PaperPage",[n("p",[e._v('\n "Inclusion, literally translated, means âbelongingâ and is the antonym of exclusion. By means of new\n structures, an inclusive society tries to offer all people â with and without disabilities â the same\n opportunities for societal participation. A key objective of inclusion is to remove barriers â including\n psychological barriers." ("Inclusion", n.d., https://www.chancengleichheit.tum.de/en/inclusion/)\n ')]),e._v(" "),n("p",[e._v('\n "The concept of diversity encompasses acceptance and respect. It means understanding that each\n individual is unique, and recognizing our individual differences. These can be along the dimensions of\n race, ethnicity, gender, sexual orientation, socio-economic status, age, physical abilities, religious\n beliefs, political beliefs, or other ideologies. It is the exploration of these differences in a safe,\n positive, and nurturing environment. It is about understanding each other and moving beyond simple\n tolerance to embracing and celebrating the rich dimensions of diversity contained within each\n individual. Diversity is a reality created by individuals and groups from a broad spectrum of\n demographic and philosophical differences. It is extremely important to supp
1ort and protect diversity\n because by valuing individuals and groups free from prejudice and by fostering a climate where equity\n and mutual respect are intrinsic, we will create a success-oriented, cooperative, and caring community\n that draws intellectual strength and produces innovative solutions from the synergy of its people."\n ~https://www.qcc.cuny.edu/diversity/definition.html\n ')]),e._v(" "),n("p",[e._v("\n Inclusion and Diversity go hand in hand. Inclusion and Diversity are about systems that respect and\n empower societies as they are, involving all people, without exception and unconditionally.\n ")]),e._v(" "),n("h2",[e._v("Motivation")]),e._v(" "),n("p",[e._v("\n Inclusion and Diversity. This is a topic, that is very important to me personally. I have witnessed many\n moments in my life that have made me realize how much we still have to learn. But there have also been\n many moments that have made me confident, that have given me hope.\n ")]),e._v(" "),n("p",[e._v("\n I see people getting discrimianted, and I see people discriminating others. I see myself getting\n discriminated, and I also see myself discriminating others. And I think, no, I am convinced, that our\n world and our society should not be like this. And I want to make it very clear here, that this is not\n only about hate, about people who really want to discriminate people intentionally. I also mean all the\n discrimination that we have learned to accept in our daily life, and all the discrimination that we show\n towards people unintentionally.\n ")]),e._v(" "),n("p",[e._v('\n But the subject is not only a personal matter. Debates about whether we should advocate for a more\n inclusive and diverse world are not appropriate. Inclusion is not optional. Inclusion is a fundamental\n human right. "According to the [UN Convention on the Rights of Persons with\n Disabilities](http://www.un.org/disabilities/convention/conventionfull.shtml), equality, autonomy and\n participation are conditions for successful inclusion. This convention became effective in Germany in\n 2009." ("Inclusion", n.d., https://www.chancengleichheit.tum.de/en/inclusion/) Inclusion and Diversity\n are fundamental principles of our society. And we should act accordingly. Now, it is time to talk about\n the HOW.\n ')]),e._v(" "),n("h2",[e._v("Inclusion and Diversity in Games")]),e._v(" "),n("p",[e._v("\n Inclusion and diversity is important in all areas. But an area that is of particular interest for me is\n software engineering and especially game engineering: We have to change the way we develop our games,\n play our games, and talk about our games.\n ")]),e._v(" "),n("p",[e._v("\n I think ultimately, this problem is linked to all domains of games, from the development of the game to\n the meta gaming. We have to think about game development processes and game development teams, we have\n to think about the games itself, and we have to think about the people who are playing the games and all\n the different communities that evolve.\n ")]),e._v(" "),n("p",[e._v("\n _It's often not easy to include everyone. Especially when it comes to concrete prototypes and products,\n rather than theoretical foundations, ideas and plans. I see it in my own projects and texts __how__ much\n I still have to learn. But I'm trying to do better. It may not even be obvious that someone is being\n excluded. It's not nice, but it happens. The important thing is to be open. To react and correct\n mistakes as soon as it becomes known. Engage in dialogue. If you are not personally involved, you won't\n understand a lot of these things. That's okay. It's not about you. It's about __us__. Take people\n seriously, see them, listen. Your basic attitude matters. It's about intentions, ideas, implementations,\n and how you act in the end. That's what it's all about._\n ")]),e._v(" "),n("p",[e._v("\n _Your games should be always guided by these principles. Always. Your responsibility towards the society\n means to include __all__ members of society. You are unique, I am unique. We are all beautiful\n individuals. Our society is diverse, and so are our games._\n ")]),e._v(" "),n("h2",[e._v("Research")]),e._v(" "),n("p",[e._v("\n The development of new processes and technical aids that bring us closer to a society that proudly lives\n equality, inclusion and diversity is a central point of my research and scientific motivation.\n ")]),e._v(" "),n("p",[e._v("\n In recent years, we have started to explore this topic in various research projects. You can find a list\n below. I am also working on some projects related to ethical frameworks for game engineering processes\n to supp
1ort inclusive and diverse development processes and games. They are still in work, but if you are\n interested in this topic, just write me. Or you can keep in touch using one of the various communication\n channels. I am sure I will inform all of you when results are available.\n ")]),e._v(" "),n("ul",[n("li",[n("Hyperlink",{attrs:{to:"https://wiki.tum.de/display/infar/%5B20SS+-+BA%5D+Enhancing+Inclusion+and+Innovation+in+Games+Engineering"}},[e._v('\n "Enhancing Inclusion and Innovation in Games Engineering"\n ')]),e._v("\n A Bachelor's Thesis by Chrysa Bika from 2020 with me as advisor. The goal of this thesis is to\n develop methods and solution-oriented approaches, which will enhance inclusion and innovation in\n games engineering. Much attention has been given to the state-of-the-art of games engineering,\n interaction of game development teams and the correlation between teams and their published video\n games. As part of the thesis, two practical projects were developed. With the first project,\n exercises and potential lecture slides for a games engineering curriculum were generated. Here\n students can, for instance, learn what it means to have an impairment and which accessibility\n features can be implemented to enable playing games. The second project is an interview with an\n expert from a famous video game company with studios across the world. The interviewee evaluated the\n introduced methods and gave insights into the work of a games company.\n ")],1),e._v(" "),n("li",[e._v('\n "Being Yourself: Women in Video Games" A seminar paper by Lorena K. Vitale from 2021 with me as\n advisor. In this paper, we investigate the difficulties of being a woman in a gaming environment by\n reviewing existing literature on gender and video games. We asked the question, if women can and\n want to play as females in games. Identifying with an avatar is fundamental for an enjoyable gaming\n experience. Our research indicates that the gaming industry systematically discriminates against\n women, considering female charactersâ negligence, and deprives them of self-expression. When gaming\n online, womenâs abilities are underestimated, and harassment is not uncommon. Women may feel safer\n when not disclosing their gender and thus dismissing the possibility of being a woman in gaming. We\n conclude that discrimination against women in gaming is a well-founded problem. Although this\n problem sometimes does not have an exclusive wrongdoer, correcting it is our societyâs\n responsibility.\n ')])])])],1)}),[],!1,null,"ef1602ba",null);component.exports;installComponents(component,{Hyperlink:n(63).default,PaperPage:n(354).default});var m=n(747),h=n(748),f=n(749),v=n(750),y=n(751),_=n(752),w=n(753),x=n(754),k=n(755),P=n(756),F=n(757),S=n(758),I=n(759),C=n(760),j=n(761),D=n(370),T=n(355),A={page:{identity:{title:"dyrda.dev",shortDescription:"The namespace behind all this.",subdirectory:"dyrdadev"}},project:{identity:{title:"dyrda.dev",shortDescription:"A namespace.",subdirectory:"dyrdadev"},preview:{detailed:{}},promotion:{},categories:{values:["science","games","technology"]},types:{values:["namespace"]},history:{from:{date:{year:2020}},to:{today:!0}}}},z={name:"Fps",components:{TextBlock:T.default,SimpleProjectLayout:D.default},layout:"free",created:function(){this.metadata=A}},E=Object(d.a)(z,(function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("SimpleProjectLayout",{attrs:{metadata:e.metadata},scopedSlots:e._u([{key:"primary-card",fn:function(){return[n("TextBlock",[n("p",[e._v("The namespace behind all of my projects: dyrdadev or dyrda.dev or dev.dyrda.")]),e._v(" "),n("p",[e._v("\n You can find most of my projects on GitHub:\n "),n("Hyperlink",{attrs:{to:"https://github.com/dyrdadev"}},[e._v("\n github.com/dyrdadev\n ")])],1)])]},proxy:!0}])})}),[],!1,null,null,null);E.exports;installComponents(E,{Hyperlink:n(63).default,TextBlock:n(355).default,SimpleProjectLayout:n(370).default});var M=n(762),L=n(763),B=(n(764),n(765)),G=n(766),O=n(767),H=n(768),$=n(769),W=n(770),R=n(771),U=n(772),N=n(773),V=n(774),Y=n(775),X=n(776),K=n(777),Z=n(778),J=n(779),Q=n(780),ee=n(781),te=n(782),ae=n(783),ie=n(784),ne=n(785),re=n(786),oe=n(787),se=n(788),le=n(789),ce=n(790),de=n(791),pe=n(792),ue=n(793),me=n(794),he=n(795);n(33),n(15),n(19),n(52),n(53),n(40);function fe(e,t){(null==t||t>e.length)&&(t=e.length);for(var i=0,n=new Array(t);i<t;i++)n[i]=e[i];return n}
1var ve,ge=[{project:{identity:{title:"dyrda.page",shortDescription:"I was crazy enough to develop my own website.",externalProjectUrl:"https://dyrda.page",subdirectory:"dyrda-page"},promotion:{icon:{source:n(827)}},preview:{detailed:{roundIcon:!0,noPeriod:!0}},categories:{values:["design","technology"]},history:{in:{date:{year:2021}}}}}],ye=[{project:{identity:{title:"dyrda.dev",shortDescription:"A namespace for my open source projects.",externalProjectUrl:"https://github.com/dyrdadev",subdirectory:"dyrda-dev"},promotion:{icon:{source:n(828)}},preview:{detailed:{roundIcon:!0,noPeriod:!0}},categories:{values:["technology"]},history:{in:{date:{year:2021}}}}},{project:{identity:{title:"Ubi-Interact",shortDescription:"A framework for developing distributed applications.",externalProjectUrl:"https://github.com/SandroWeber/ubi-interact",subdirectory:"ubi-interact"},categories:{values:["science","technology"]},history:{from:{date:{year:2018}},to:{date:{year:2019}}}}}],_e=(n(829),n(830),n(831),[].concat(ge,ye)),be=function(e,t){var n="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!n){if(Array.isArray(e)||(n=function(e,t){if(!e)return;if("string"==typeof e)return fe(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return fe(e,t)}(e))||t&&e&&"number"==typeof e.length){n&&(e=n);var i=0,r=function(){};return{s:r,n:function(){return i>=e.length?{done:!0}:{done:!1,value:e[i++]}},e:function(e){throw e},f:r}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,l=!0,c=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return l=e.done,e},e:function(e){c=!0,o=e},f:function(){try{l||null==n.return||n.return()}finally{if(c)throw o}}}}(_e);try{for(be.s();!(ve=be.n()).done;){var we=ve.value;we.project.identity.underConstruction=!0,void 0===we.project.identity.externalProjectUrl&&(we.project.identity.originalSubdirectory=we.project.identity.subdirectory,we.project.identity.subdirectory="under-construction",we.project.identity.title=we.project.identity.title+" ð§ï¸")}}catch(e){be.e(e)}finally{be.f()}var xe=_e,ke=n(796),Pe=n(797),Fe=n(798),Se=n(799),Ie=n(800),Ce=n(801),je=n(802),De=n(803),Te=n(804),Ae=n(805),ze=n(806),Ee=n(807),Me=n(808),Le=n(809),Be=n(810),Ge=n(811),Oe=n(812),He=n(813),$e=n(814),We=n(815),Re=n(816),Ue=n(817),Ne=n(818),Ve=n(819),qe=n(820),Ye=n(821),Xe=n(822),Ke=[l.metadata,m.metadata,h.metadata,f.metadata,v.metadata,y.metadata,_.metadata,w.metadata,x.metadata,k.metadata,P.metadata,F.metadata,S.metadata,M.metadata,I.metadata,C.metadata,j.metadata,L.metadata,B.metadata,G.metadata,O.metadata,H.metadata,$.metadata,W.metadata,ae.metadata,te.metadata,U.metadata,pe.metadata,de.metadata,R.metadata,ce.metadata,le.metadata,oe.metadata,se.metadata,re.metadata,ne.metadata,ue.metadata,ie.metadata,N.metadata,V.metadata,Y.metadata,X.metadata,K.metadata,Z.metadata,J.metadata,Q.metadata,ee.metadata,me.metadata,he.metadata,ke.metadata,Pe.metadata,Fe.metadata,Se.metadata,Ie.metadata,Ce.metadata,je.metadata,De.metadata,Te.metadata,Ae.metadata,ze.metadata,Ee.metadata,Me.metadata,Le.metadata,Be.metadata,Ge.metadata,Oe.metadata,He.metadata,$e.metadata,We.metadata,Re.metadata,Ue.metadata,Ne.metadata,Ve.metadata,qe.metadata,Ye.metadata,Xe.metadata].concat(Object(o.a)(xe)),Ze=n(359),Je=n(389);function Qe(object,e){var t=Object.keys(object);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(object);e&&(n=n.filter((function(e){return Object.getOwnPropertyDescriptor(object,e).enumerable}))),t.push.apply(t,n)}return t}var et={default:{fiveColumns:{big:[{x:0,y:1},{x:3,y:0},{x:1,y:4},{x:3,y:7},{x:1,y:9},{x:3,y:11}],small:[{x:4,y:3},{x:4,y:5},{x:1,y:7},{x:3,y:8}]},threeColumns:{big:[{x:0,y:1},{x:1,y:5},{x:0,y:9},{x:1,y:13},{x:0,y:14},{x:1,y:17}],small:[{x:0,y:3},{x:2,y:3},{x:0,y:6},{x:2,y:8}]}},alternative:{fiveColumns:{big:[{x:0,y:1},{x:3,y:2},{x:1,y:5},{x:2,y:5},{x:2,y:6},{x:2,y:7}],small:[{x:0,y:3},{x:0,y:4},{x:1,y:4}]},threeColumns:{big:[{x:0,y:1},{x:1,y:4},{x:0,y:7},{x:1,y:10},{x:0,y:13},{x:1,y:16}],small:[{x:0,y:2},{x:2,y:3},{x:4,y:0},{x:2,y:8}]}}},tt=function(e){for(var i=1;i<arguments.length;i++){var source=null!=arguments[i]?arguments[i]:{};
1i%2?Qe(Object(source),!0).forEach((function(t){Object(r.a)(e,t,source[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(source)):Qe(Object(source)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(source,t))}))}return e}({name:"ProjectListLayout",layout:"free",props:{metadata:{type:Object,required:!0},prefilter:{type:Function,required:!1,default:function(e){return e}},promotions:{type:Array,default:function(){return[]}}},data:function(){return{numberOfRows:0}},computed:{pageMetadata:function(){return Object(Ze.o)(this.metadata)},unitsPerRow:function(){return this.$breakpoints.xl?5:this.$breakpoints.md?3:2},relevantProjects:function(){for(var e=[],i=0;i<Ke.length;i++)e.push(this.selectProjectMetadata(Ke[i]));e=this.prefilter(e);for(var t=0;t<e.length;t++){var n,r;void 0!==(null===(n=e[t])||void 0===n||null===(r=n.preview)||void 0===r?void 0:r.priority)?e[t].orderNumber=[999999999+e[t].preview.priority,0,0]:e[t].orderNumber=Object(Ze.i)(e[t])}return e=e.sort((function(a,b){return a.orderNumber[0]>b.orderNumber[0]?-1:a.orderNumber[0]<b.orderNumber[0]?1:a.orderNumber[1]>b.orderNumber[1]?-1:a.orderNumber[1]<b.orderNumber[1]?1:a.orderNumber[2]>b.orderNumber[2]?-1:a.orderNumber[2]<b.orderNumber[2]?1:0})),e},projectCards:function(){for(var e=this,t=[],n=[],r=0,o=function(element){return element.identity.underConstruction&&element.identity.externalProjectUrl?element.identity.externalProjectUrl:"/"+Object(Ze.v)(element)},l=function(e,n){t.splice(e,0,n)},i=0;i<this.relevantProjects.length;i++){var c,d,m,h,f=this.relevantProjects[i];if(n.push({title:this.selectTitle(f),description:Object(Ze.t)(f),to:o(f),hideDescriptionInDirectoryListView:Object(Ze.h)(f)}),1===n.length&&(r=t.length),3===n.length&&(r<3&&(r=3),l(r,{type:"triple",projects:n}),n=[]),f.preview)if(null!=f&&null!==(c=f.preview)&&void 0!==c&&c.detailed)"meta"===(null==f||null===(d=f.preview)||void 0===d?void 0:d.detailed.type)&&null!=f&&null!==(m=f.promotion)&&void 0!==m&&m.hasOwnProperty("background")?t.push({type:"detailed_meta",project:f,to:o(f)}):null!=f&&null!==(h=f.promotion)&&void 0!==h&&h.hasOwnProperty("icon")&&t.push({type:"detailed_icon",project:f,to:o(f)})}n.length>0&&l(t.length-1,{type:"triple",projects:n});var v=[];if(this.unitsPerRow>2)for(var y=function(t){var n,r,l=e.promotions[t],c=null===(n=Ke.find((function(element){var e,t,n,r;return(null==element||null===(e=element.project)||void 0===e||null===(t=e.identity)||void 0===t?void 0:t.subdirectory)===l.findViaSubdirectory||(null==element||null===(n=element.project)||void 0===n||null===(r=n.identity)||void 0===r?void 0:r.originalSubdirectory)===l.findViaSubdirectory})))||void 0===n?void 0:n.project;void 0!==c&&(null!=c&&null!==(r=c.promotion)&&void 0!==r&&r.hasOwnProperty("reel")&&v.push({type:"reel",project:c,to:o(c),cardType:l.cardType}))},_=0;_<this.promotions.length;_++)y(_);for(var w,x,k=this.unitsPerRow,P={},F={x:0,y:0},S=function(e,t){return void 0===P[t]||void 0===P[t][e]},I=function(e){var t=e;return t.x+1>=k?(t.x=0,t.y++):t.x++,t},C=function(t,n,r,o,l){t.transform={x:n,y:r,width:o,height:l},e.numberOfRows=0;for(var c=1;c<=l;c++){var u=r+c-1;void 0===P[u]&&(P[u]={}),e.numberOfRows<u&&(e.numberOfRows=u+1);for(var d=1;d<=o;d++){var m=n+d-1;P[u][m]="blocked"}}},j=function(e){for(;!1===S(F.x,F.y);)F=I(F);C(e,F.x,F.y,1,1)},D=function(){for(var e={x:F.x,y:F.y};!1===(S(e.x,e.y)&&e.x+1<k&&S(e.x+1,e.y));)e=I(e);return e},T=0,A=0,z=function(){var t=5===e.unitsPerRow?et.default.fiveColumns.small:3===e.unitsPerRow?et.default.threeColumns.small:{},n=E(t,A);return A++,n},E=function(e,t){return{x:e[t].x,y:e[t].y}},M=0;M<v.length;M++){var L=v[M];if("bigSquare"===L.cardType){var B=(w=void 0,x=void 0,w=5===e.unitsPerRow?et.default.fiveColumns.big:3===e.unitsPerRow?et.default.threeColumns.big:{},x=E(w,T),T++,x);C(L,B.x,B.y,2,2)}else{var G=z();C(L,G.x,G.y,1,1)}}for(var O=0;O<t.length;O++){var H=t[O];if("triple"===H.type&&2===k){H.cardType="horizontalRectangle";var $=D();C(H,$.x,$.y,2,1)}else j(H)}return[].concat(v,t)}},beforeMount:function(){this.$store.commit("layout/setFreeLayout"),this.$store.commit("background/setSubtleBackgroun
1d")},methods:{selectProjectMetadata:function(e){return Object(Ze.s)(e)},selectTitle:function(e){return Object(Ze.u)(e)||Object(Ze.w)(e)},selectShortDescription:function(e){return Object(Ze.t)(e)},selectSubdirectory:function(e){return Object(Ze.v)(e)},getPositionStyle:function(e){return{gridColumnStart:e.x+1,gridColumnEnd:e.x+1+e.width-1,gridRowStart:e.y+1,gridRowEnd:e.y+1+e.height-1}}}},Object(Je.a)()),at=tt,it=n(832);var nt=Object(d.a)(at,(function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{class:[e.$style.frame,e.$breakpoints.sm?e.$style.sm:"",e.$breakpoints.lg?e.$style.lg:""]},[n("div",{staticClass:"visual-alignment-padding-for-rounded-corner-neighbours non-fullscreen-cover-top-margin",class:e.$style.coverWrapper},[n("PageCover",{attrs:{metadata:e.metadata,"show-utility-bar":!1,"show-banner":!1,"show-abstract":!1,"use-vertical-layout":!1===e.$breakpoints.xl||e.$responsive.orientation.portrait}})],1),e._v(" "),n("div",{class:e.$style.grid,style:{"--number-of-rows":e.numberOfRows}},[e._l(e.projectCards,(function(t,i){return["detailed_icon"===t.type?n("div",{key:i,class:[e.$style.listItem,e.$style.gridItem],style:e.getPositionStyle(t.transform)},[n("ProjectPinCard",{attrs:{to:t.to,title:e.selectTitle(t.project),description:e.selectShortDescription(t.project),icon:t.project.promotion.icon.source,"fitty-size-factor":1,round:t.project.preview.detailed.roundIcon,"no-period":t.project.preview.detailed.noPeriod}})],1):e._e(),e._v(" "),"detailed_meta"===t.type?n("div",{key:i,class:[e.$style.listItem,e.$style.gridItem],style:e.getPositionStyle(t.transform)},[n("ProjectPinCard",{attrs:{to:t.to,title:e.selectTitle(t.project),description:e.selectShortDescription(t.project),icon:t.project.promotion.icon.source,"title-color":t.project.promotion.background.textColor||"","fitty-size-factor":1,"no-period":t.project.preview.detailed.noPeriod,"background-image":t.project.promotion.background.source,"icon-shadow":!1}})],1):"reel"===t.type?n("div",{key:i,class:[e.$style.listItem,e.$style[t.cardType],e.$style.gridItem],style:e.getPositionStyle(t.transform)},[n("ProjectReelCard",{attrs:{to:t.to,title:e.selectTitle(t.project),description:e.selectShortDescription(t.project),reel:t.project.promotion.reel,"size-factor":"bigSquare"===t.cardType||"verticalRectangle"===t.cardType||"horizontalRectangle"===t.cardType?2:1}})],1):"triple"===t.type?n("div",{key:i,class:[e.$style.listItem,e.$style.gridItem,e.$style[t.cardType]],style:e.getPositionStyle(t.transform)},[n("DirectoriesPreviewCard",{attrs:{items:t.projects,"card-size-factor":"horizontalRectangle"===t.cardType?2:1,"fitty-size-factor":"horizontalRectangle"===t.cardType?2:1.3,"fix-double-line":"horizontalRectangle"!==t.cardType,"min-number-of-rows":3}})],1):e._e()]}))],2)])}),[],!1,(function(e){this.$style=it.default.locals||it.default}),"1fcbb79b",null);t.default=nt.exports;installComponents(nt,{PageCover:n(403).default,ProjectPinCard:n(388).default,ProjectReelCard:n(823).default,DirectoriesPreviewCard:n(435).default})},,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,function(e,t,n){"use strict";n.r(t),n.d(t,"metadata",(function(){return o}));n(31),n(54),n(27);var r=n(359),o={page:{identity:{title:"Technology"},abstract:{value:"On this page I want to share technology with you. Some of these projects are here to Many of these projects are free and made do be used. Others are here to provide knowledge. Most of the projects are in the area of web development and game development. Just keep reading and explore it by yourself."}}},l={name:"Engineering",layout:"default",created:function(){this.metadata=o},methods:{prefilter:function(e){return e.filter((function(e){return Object(r.f)(e).includes("technology")}))}}},c=n(2),component=Object(c.a)(l,(function(){var e=this,t=e.$createElement;return(e._self._c||t)("ProjectListLayout",{attrs:{metadata:e.metadata,prefilter:e.prefilter,promotions:[{findViaSubdirectory:"first-person-controller-for-unity",cardType:"bigSquare"},{findViaSubdirectory:"guess-the-distance",cardType:"bigSquare"},{findViaSubdirectory:"gamespace-knowledge-graph",cardType:"smallSquare"},{findViaSubdirectory:"hierarchy-tree-for-unity",cardType:"smallSquare"}]}})}),[],!1,null,"935310de",null);t.default=component.exports;installComponents(component,{ProjectListLayout:n(836).default})}])]);
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.