Skip to content

Commit

Permalink
added basic classes for stroy npc
Browse files Browse the repository at this point in the history
  • Loading branch information
DerKatsche committed Dec 14, 2023
1 parent aee65ae commit 017e92a
Show file tree
Hide file tree
Showing 8 changed files with 113 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
import IAsyncPresentationBuilder from "../../PresentationBuilder/IAsyncPresentationBuilder";

export default interface IStoryNPCBuilder extends IAsyncPresentationBuilder {}
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export default interface IStoryNPCController {}
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export default interface IStoryNPCPresenter {}
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
import { injectable } from "inversify";
import StoryNPCController from "./StoryNPCController";
import StoryNPCPresenter from "./StoryNPCPresenter";
import IStoryNPCController from "./IStoryNPCController";
import IStoryNPCPresenter from "./IStoryNPCPresenter";
import StoryNPCViewModel from "./StoryNPCViewModel";
import StoryNPCView from "./StoryNPCView";
import AsyncPresentationBuilder from "../../PresentationBuilder/AsyncPresentationBuilder";
import { LearningElementModel } from "src/Components/Core/Domain/LearningElementModels/LearningElementModelTypes";

/*
This Template Provides the whole scaffolding for a React Component.
Copy below lines in the DI Container and its Types
bind<IPresentationBuilder>(BUILDER_TYPES.IStoryNPCBuilder).to(StoryNPCBuilder);
IStoryNPCBuilder: Symbol("IStoryNPCBuilder"),
director.Builder = CoreDIContainer.get<IPresentationBuilder>(
BUILDER_TYPES.IStoryNPCBuilder
);
director.build();
*/

@injectable()
export default class StoryNPCBuilder extends AsyncPresentationBuilder<
StoryNPCViewModel,
IStoryNPCController,
StoryNPCView,
IStoryNPCPresenter
> {
constructor() {
super(
StoryNPCViewModel,
StoryNPCController,
StoryNPCView,
StoryNPCPresenter
);
}

public modelType: LearningElementModel;

public buildViewModel(): void {
super.buildViewModel();
this.viewModel!.modelType = this.modelType;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
import IStoryNPCController from "./IStoryNPCController";

export default class StoryNPCController implements IStoryNPCController {}
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
import IStoryNPCPresenter from "./IStoryNPCPresenter";
import StoryNPCViewModel from "./StoryNPCViewModel";

export default class StoryNPCPresenter implements IStoryNPCPresenter {
constructor(private viewModel: StoryNPCViewModel) {}
}
45 changes: 45 additions & 0 deletions src/Components/Core/Presentation/Babylon/StoryNPC/StoryNPCView.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
import LearningElementModelLookup from "src/Components/Core/Domain/LearningElementModels/LearningElementModelLookup";
import IStoryNPCController from "./IStoryNPCController";
import StoryNPCViewModel from "./StoryNPCViewModel";
import IScenePresenter from "../SceneManagement/IScenePresenter";
import CoreDIContainer from "~DependencyInjection/CoreDIContainer";
import SCENE_TYPES, {
ScenePresenterFactory,
} from "~DependencyInjection/Scenes/SCENE_TYPES";
import LearningSpaceSceneDefinition from "../SceneManagement/Scenes/LearningSpaceSceneDefinition";
import { Mesh } from "@babylonjs/core";

import iconLink from "../../../../../Assets/3dModels/sharedModels/l-icons-h5p-1.glb";

export default class StoryNPCView {
private scenePresenter: IScenePresenter;
constructor(
private viewModel: StoryNPCViewModel,
private controller: IStoryNPCController
) {
let scenePresenterFactory = CoreDIContainer.get<ScenePresenterFactory>(
SCENE_TYPES.ScenePresenterFactory
);
this.scenePresenter = scenePresenterFactory(LearningSpaceSceneDefinition);
}

public async setupStoryNPC(): Promise<void> {
await Promise.all([this.loadElementModel(), this.loadIconModel()]);
}

private async loadElementModel(): Promise<void> {
let modelLink;
modelLink = LearningElementModelLookup[this.viewModel.modelType];

this.viewModel.modelMeshes = (await this.scenePresenter.loadModel(
modelLink,
true
)) as Mesh[];
}

private async loadIconModel(): Promise<void> {
this.viewModel.iconMeshes = (await this.scenePresenter.loadModel(
iconLink
)) as Mesh[];
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
import { Mesh } from "@babylonjs/core";
import { LearningElementModel } from "src/Components/Core/Domain/LearningElementModels/LearningElementModelTypes";

export default class StoryNPCViewModel {
modelType: LearningElementModel;
modelMeshes: Mesh[];
iconMeshes: Mesh[];
}

0 comments on commit 017e92a

Please sign in to comment.