diff --git a/README.md b/README.md
index 024dd16d..1ec30b8a 100644
--- a/README.md
+++ b/README.md
@@ -12,6 +12,10 @@ for everything.
- LOD management
## Sample images
+### Terrain
+
+
+
### Voxelization


diff --git a/artifacts/FOLIAGE-MATERIAL-INTEGRATION-1.png b/artifacts/FOLIAGE-MATERIAL-INTEGRATION-1.png
new file mode 100644
index 00000000..cdaaf70c
Binary files /dev/null and b/artifacts/FOLIAGE-MATERIAL-INTEGRATION-1.png differ
diff --git a/artifacts/FOLIAGE-MATERIAL-INTEGRATION.png b/artifacts/FOLIAGE-MATERIAL-INTEGRATION.png
new file mode 100644
index 00000000..e38d300f
Binary files /dev/null and b/artifacts/FOLIAGE-MATERIAL-INTEGRATION.png differ
diff --git a/artifacts/MATERIAL-LAYERS.png b/artifacts/MATERIAL-LAYERS.png
new file mode 100644
index 00000000..bbf904c3
Binary files /dev/null and b/artifacts/MATERIAL-LAYERS.png differ
diff --git a/artifacts/MATERIAL_PAINTING-2.png b/artifacts/MATERIAL_PAINTING-2.png
new file mode 100644
index 00000000..3890c741
Binary files /dev/null and b/artifacts/MATERIAL_PAINTING-2.png differ
diff --git a/artifacts/MATERIAL_PAINTING.png b/artifacts/MATERIAL_PAINTING.png
new file mode 100644
index 00000000..9e7dddb0
Binary files /dev/null and b/artifacts/MATERIAL_PAINTING.png differ
diff --git a/common/pom.xml b/common/pom.xml
deleted file mode 100644
index ca91eba1..00000000
--- a/common/pom.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-
-
- 4.0.0
-
- com.pine
- pineengine
- 0.0.1-SNAPSHOT
-
-
- common
-
-
- 22
- 22
- UTF-8
-
-
-
\ No newline at end of file
diff --git a/editor/pom.xml b/editor/pom.xml
deleted file mode 100644
index abff348e..00000000
--- a/editor/pom.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-
-
- 4.0.0
-
- com.pine
- pineengine
- 0.0.1-SNAPSHOT
-
-
- editor
-
-
- 22
- 22
- UTF-8
-
-
-
- com.pine
- engine
- 0.0.1-SNAPSHOT
-
-
-
\ No newline at end of file
diff --git a/editor/src/main/java/com/pine/panels/component/AbstractFormField.java b/editor/src/main/java/com/pine/panels/component/AbstractFormField.java
deleted file mode 100644
index cdefe5e7..00000000
--- a/editor/src/main/java/com/pine/panels/component/AbstractFormField.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package com.pine.panels.component;
-
-import com.pine.core.AbstractView;
-import com.pine.inspection.FieldDTO;
-
-import java.util.function.BiConsumer;
-
-public abstract class AbstractFormField extends AbstractView {
- protected final FieldDTO dto;
- protected final BiConsumer changerHandler;
-
- public AbstractFormField(FieldDTO dto, BiConsumer changerHandler) {
- this.dto = dto;
- this.changerHandler = changerHandler;
- }
-}
diff --git a/editor/src/main/java/com/pine/panels/component/AccordionPanel.java b/editor/src/main/java/com/pine/panels/component/AccordionPanel.java
deleted file mode 100644
index 78f874bf..00000000
--- a/editor/src/main/java/com/pine/panels/component/AccordionPanel.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package com.pine.panels.component;
-
-import com.pine.core.AbstractView;
-import imgui.ImGui;
-
-public class AccordionPanel extends AbstractView {
- public String title;
-
- @Override
- public void render() {
- if (title.isEmpty()) {
- super.render();
- return;
- }
-
- if (ImGui.collapsingHeader(title + imguiId)) {
- super.render();
- }
- }
-}
diff --git a/editor/src/main/java/com/pine/panels/component/FormPanel.java b/editor/src/main/java/com/pine/panels/component/FormPanel.java
deleted file mode 100644
index 0595f433..00000000
--- a/editor/src/main/java/com/pine/panels/component/FormPanel.java
+++ /dev/null
@@ -1,108 +0,0 @@
-package com.pine.panels.component;
-
-import com.pine.core.AbstractView;
-import com.pine.inspection.*;
-import com.pine.panels.component.impl.*;
-import imgui.ImGui;
-
-import java.util.HashMap;
-import java.util.Map;
-import java.util.function.BiConsumer;
-
-public class FormPanel extends AbstractView {
- private final BiConsumer changeHandler;
- private Inspectable inspectable;
-
- public FormPanel(BiConsumer changeHandler) {
- this.changeHandler = changeHandler;
- }
-
- public void setInspection(Inspectable data) {
- if (this.inspectable == data) {
- return;
- }
- this.inspectable = data;
- children.clear();
-
- if (data == null) {
- return;
- }
- Map groups = new HashMap<>();
- processMethods(data, groups);
- processFields(data, groups);
- }
-
- private void processMethods(Inspectable data, Map groups) {
- for (MethodDTO methodDTO : data.getMethodsAnnotated()) {
- if (!groups.containsKey(methodDTO.getGroup())) {
- groups.put(methodDTO.getGroup(), appendChild(new AccordionPanel()));
- }
-
- AccordionPanel group = groups.get(methodDTO.getGroup());
- group.title = methodDTO.getGroup();
- group.appendChild(new ExecutableFunctionField(methodDTO));
- }
- }
-
- private void processFields(Inspectable data, Map groups) {
- for (FieldDTO field : data.getFieldsAnnotated()) {
- if (!groups.containsKey(field.getGroup())) {
- groups.put(field.getGroup(), appendChild(new AccordionPanel()));
- }
-
- AccordionPanel group = groups.get(field.getGroup());
- group.title = field.getGroup();
- switch (field.getType()) {
- case STRING:
- if (field.getField().isAnnotationPresent(ResourceTypeField.class)) {
- group.appendChild(new ResourceField(field, changeHandler));
- } else if (field.getField().isAnnotationPresent(TypePreviewField.class)) {
- group.appendChild(new PreviewField(field, changeHandler));
- } else {
- group.appendChild(new StringField(field, changeHandler));
- }
- break;
- case INT:
- group.appendChild(new IntField(field, changeHandler));
- break;
- case FLOAT:
- group.appendChild(new FloatField(field, changeHandler));
- break;
- case BOOLEAN:
- group.appendChild(new BooleanField(field, changeHandler));
- break;
- case VECTOR2:
- group.appendChild(new Vector2Field(field, changeHandler));
- break;
- case VECTOR3:
- group.appendChild(new Vector3Field(field, changeHandler));
- break;
- case VECTOR4:
- group.appendChild(new Vector4Field(field, changeHandler));
- break;
- case QUATERNION:
- group.appendChild(new QuaternionField(field, changeHandler));
- break;
- case COLOR:
- group.appendChild(new ColorField(field, changeHandler));
- break;
- case OPTIONS:
- group.appendChild(new OptionsField(field, changeHandler));
- break;
- }
- }
- }
-
- public Inspectable getInspectable() {
- return inspectable;
- }
-
- @Override
- public void render() {
- if (inspectable != null) {
- ImGui.text(inspectable.getIcon() + inspectable.getTitle());
- ImGui.separator();
- super.render();
- }
- }
-}
diff --git a/editor/src/main/java/com/pine/panels/component/impl/ColorField.java b/editor/src/main/java/com/pine/panels/component/impl/ColorField.java
deleted file mode 100644
index 600d365b..00000000
--- a/editor/src/main/java/com/pine/panels/component/impl/ColorField.java
+++ /dev/null
@@ -1,29 +0,0 @@
-package com.pine.panels.component.impl;
-
-import com.pine.inspection.Color;
-import com.pine.inspection.FieldDTO;
-import com.pine.panels.component.AbstractFormField;
-import imgui.ImGui;
-import imgui.flag.ImGuiColorEditFlags;
-
-import java.util.function.BiConsumer;
-
-public class ColorField extends AbstractFormField {
- private final float[] values = new float[4];
-
- public ColorField(FieldDTO dto, BiConsumer changerHandler) {
- super(dto, changerHandler);
- var cast = (Color) dto.getValue();
- values[0] = cast.x;
- values[1] = cast.y;
- values[2] = cast.z;
- }
-
- @Override
- public void render() {
- ImGui.text(dto.getLabel());
- if (ImGui.colorPicker3(dto.getId(), values, ImGuiColorEditFlags.NoSidePreview | ImGuiColorEditFlags.DisplayRGB | ImGuiColorEditFlags.NoAlpha)) {
- changerHandler.accept(dto, values);
- }
- }
-}
diff --git a/editor/src/main/java/com/pine/panels/files/DirectoryPanel.java b/editor/src/main/java/com/pine/panels/files/DirectoryPanel.java
deleted file mode 100644
index 93792274..00000000
--- a/editor/src/main/java/com/pine/panels/files/DirectoryPanel.java
+++ /dev/null
@@ -1,246 +0,0 @@
-package com.pine.panels.files;
-
-import com.pine.component.ComponentType;
-import com.pine.component.MeshComponent;
-import com.pine.core.AbstractView;
-import com.pine.injection.PInject;
-import com.pine.repository.EditorRepository;
-import com.pine.repository.FSEntry;
-import com.pine.repository.FilesRepository;
-import com.pine.repository.WorldRepository;
-import com.pine.repository.streaming.StreamableResourceType;
-import com.pine.service.FilesService;
-import com.pine.service.grid.WorldService;
-import com.pine.service.importer.ImporterService;
-import com.pine.service.importer.data.SceneImportData;
-import com.pine.service.rendering.RequestProcessingService;
-import com.pine.service.request.AddEntityRequest;
-import com.pine.service.request.LoadSceneRequest;
-import com.pine.service.streaming.impl.SceneService;
-import com.pine.theme.Icons;
-import imgui.ImGui;
-import imgui.ImVec4;
-import imgui.flag.*;
-
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
-
-public class DirectoryPanel extends AbstractView {
- private static final ImVec4 DIRECTORY_COLOR = new ImVec4(
- 1,
- 0.8352941f,
- 0.38039216f,
- 1
- );
- private static final int FLAGS = ImGuiTableFlags.ScrollY | ImGuiTableFlags.RowBg;
-
- @PInject
- public FilesService filesService;
- @PInject
- public FilesRepository filesRepository;
- @PInject
- public WorldService worldService;
- @PInject
- public EditorRepository editorRepository;
- @PInject
- public RequestProcessingService requestProcessingService;
- @PInject
- public SceneService sceneService;
- @PInject
- public ImporterService importerService;
- @PInject
- public WorldRepository worldRepository;
-
- public boolean isWindowFocused;
- public String currentDirectory;
- public Map selected;
- public Map toCut;
- public FSEntry inspection;
-
- @Override
- public void render() {
- hotkeys();
-
- if (ImGui.beginTable(imguiId, 5, FLAGS)) {
- ImGui.tableSetupColumn("", ImGuiTableColumnFlags.WidthFixed, 30f);
- ImGui.tableSetupColumn("Name", ImGuiTableColumnFlags.WidthStretch);
- ImGui.tableSetupColumn("Import date", ImGuiTableColumnFlags.WidthFixed, 100f);
- ImGui.tableSetupColumn("Type", ImGuiTableColumnFlags.WidthFixed, 100f);
- ImGui.tableSetupColumn("Size", ImGuiTableColumnFlags.WidthFixed, 100f);
- ImGui.tableHeadersRow();
-
- List children = filesRepository.parentChildren.get(currentDirectory);
- if (children != null) {
- for (var child : children) {
- FSEntry fEntry = filesRepository.entry.get(child);
- if (fEntry.isDirectory()) {
- renderDirectory(fEntry);
- } else {
- renderFile(fEntry);
- }
- }
- }
- ImGui.endTable();
- }
- }
-
- private void renderDirectory(FSEntry root) {
- ImGui.tableNextRow();
- if (selected.containsKey(root.getId())) {
- ImGui.tableSetBgColor(ImGuiTableBgTarget.RowBg0, editorRepository.accentU32);
- ImGui.tableSetBgColor(ImGuiTableBgTarget.RowBg1, editorRepository.accentU32);
- }
-
- ImGui.tableNextColumn();
- ImGui.textColored(DIRECTORY_COLOR, Icons.folder);
- onClick(root);
- if (toCut.containsKey(root.id)) {
- textDisabledColumn(root.name, root);
- textDisabledColumn("--", root);
- textDisabledColumn("Directory", root);
- textDisabledColumn("--", root);
- } else {
- textColumn(root.name, root);
- textColumn("--", root);
- textColumn("Directory", root);
- textColumn("--", root);
- }
- }
-
- private void renderFile(FSEntry root) {
- StreamableResourceType resourceType = root.getType();
- ImGui.tableNextRow();
- if (selected.containsKey(root.getId())) {
- ImGui.tableSetBgColor(ImGuiTableBgTarget.RowBg0, editorRepository.accentU32);
- ImGui.tableSetBgColor(ImGuiTableBgTarget.RowBg1, editorRepository.accentU32);
- }
- if (toCut.containsKey(root.getId())) {
- textDisabledColumn(resourceType.getIcon(), root);
- textDisabledColumn(root.name, root);
- textDisabledColumn(root.creationDateString, root);
- textDisabledColumn(resourceType.getTitle(), root);
- textDisabledColumn(root.sizeText, root);
- } else {
- textColumn(resourceType.getIcon(), root);
- textColumn(root.name, root);
- textColumn(root.creationDateString, root);
- textColumn(resourceType.getTitle(), root);
- textColumn(root.sizeText, root);
- }
- }
-
- private void textColumn(String Directory, FSEntry root) {
- ImGui.tableNextColumn();
- ImGui.text(Directory);
- onClick(root);
- }
-
- private void textDisabledColumn(String label, FSEntry entry) {
- ImGui.tableNextColumn();
- ImGui.textDisabled(label);
- onClick(entry);
- }
-
- protected void hotkeys() {
- if (!isWindowFocused) {
- return;
- }
- if (ImGui.isKeyPressed(ImGuiKey.Enter) && !selected.isEmpty()) {
- openSelected();
- }
-
- if (ImGui.isKeyPressed(ImGuiKey.Delete) && !selected.isEmpty()) {
- deleteSelected();
- }
-
- if (ImGui.isKeyDown(ImGuiKey.LeftCtrl) && ImGui.isKeyPressed(ImGuiKey.A)) {
- selectAll();
- }
-
- if (ImGui.isKeyDown(ImGuiKey.LeftCtrl) && ImGui.isKeyPressed(ImGuiKey.X)) {
- cutSelected();
- }
-
- if (ImGui.isKeyDown(ImGuiKey.LeftCtrl) && ImGui.isKeyPressed(ImGuiKey.V)) {
- pasteSelected();
- }
- }
-
- private void pasteSelected() {
- for (var key : toCut.keySet()) {
- var children = filesRepository.parentChildren.get(currentDirectory);
- if (!children.contains(key)) {
- var previousParentId = filesRepository.childParent.get(key);
- filesRepository.parentChildren.get(previousParentId).remove(key);
-
- children.add(key);
- filesRepository.childParent.put(key, currentDirectory);
- }
- }
- toCut.clear();
- }
-
- private void openSelected() {
- for (String id : selected.keySet()) {
- openResource(filesRepository.entry.get(id));
- }
- }
-
- private void cutSelected() {
- toCut.clear();
- toCut.putAll(selected);
- }
-
- private void selectAll() {
- var children = filesRepository.parentChildren.get(currentDirectory);
- for (var child : children) {
- selected.put(child, true);
- }
- }
-
- private void deleteSelected() {
- filesService.deleteSelected(selected.keySet());
- }
-
- protected void onClick(FSEntry root) {
- if (ImGui.isItemHovered() && ImGui.isItemClicked()) {
- if (!ImGui.isKeyDown(ImGuiKey.LeftCtrl)) {
- selected.clear();
- }
- selected.put(root.getId(), true);
- if (root.isDirectory()) {
- inspection = null;
- } else {
- inspection = root;
- }
- }
- if (ImGui.isItemHovered() && ImGui.isMouseDoubleClicked(ImGuiMouseButton.Left)) {
- openResource(root);
- }
- }
-
- protected void openResource(FSEntry root) {
- if (root == null) {
- return;
- }
- if (root.isDirectory()) {
- currentDirectory = root.id;
- selected.clear();
- } else {
- switch (root.getType()) {
- case SCENE -> {
- var scene = (SceneImportData) sceneService.stream(importerService.getPathToFile(root.getId(), StreamableResourceType.SCENE), Collections.emptyMap(), Collections.emptyMap());
- requestProcessingService.addRequest(new LoadSceneRequest(worldRepository.entityMap.get(WorldRepository.ROOT_ID), scene));
- }
- case MESH -> {
- var request = new AddEntityRequest(List.of(ComponentType.MESH));
- requestProcessingService.addRequest(request);
-
- MeshComponent meshComponent = worldRepository.bagMeshComponent.get(request.getResponse().id());
- meshComponent.lod0 = root.getId();
- }
- }
- }
- }
-}
diff --git a/editor/src/main/java/com/pine/panels/header/GlobalSettingsPanel.java b/editor/src/main/java/com/pine/panels/header/GlobalSettingsPanel.java
deleted file mode 100644
index b53ed38f..00000000
--- a/editor/src/main/java/com/pine/panels/header/GlobalSettingsPanel.java
+++ /dev/null
@@ -1,86 +0,0 @@
-package com.pine.panels.header;
-
-import com.pine.core.AbstractView;
-import com.pine.core.UIUtil;
-import com.pine.injection.PInject;
-import com.pine.repository.*;
-import com.pine.theme.Icons;
-import imgui.ImGui;
-import imgui.type.ImInt;
-
-import static com.pine.theme.Icons.ONLY_ICON_BUTTON_SIZE;
-
-public class GlobalSettingsPanel extends AbstractView {
- private static final String[] SHADING_MODE_OPTIONS = DebugShadingModel.getLabels();
-
- private final float[] cameraSensitivity = new float[1];
- private final ImInt editorMode = new ImInt(0);
-
- @PInject
- public EngineRepository engineRepository;
-
- @PInject
- public EditorRepository editorRepository;
-
- @PInject
- public CameraRepository cameraRepository;
-
- @Override
- public void render() {
- editorMode.set(editorRepository.editorMode.index);
- ImGui.setNextItemWidth(150);
- if (ImGui.combo(imguiId, editorMode, EditorMode.getOptions())) {
- editorRepository.editorMode = EditorMode.valueOfIndex(editorMode.get());
- }
- cameraMode();
- shadingMode();
- }
-
-
- private void cameraMode() {
- UIUtil.dynamicSpacing(575);
- ImGui.text("Camera");
- ImGui.sameLine();
- if (ImGui.button(Icons.center_focus_strong + "##centerCamera", ONLY_ICON_BUTTON_SIZE, ONLY_ICON_BUTTON_SIZE)) {
- cameraRepository.currentCamera.position.zero();
- cameraRepository.currentCamera.registerChange();
- }
-
- ImGui.sameLine();
- cameraSensitivity[0] = cameraRepository.movementSensitivity;
- ImGui.setNextItemWidth(75);
- if (ImGui.dragFloat( "##speedCamera", cameraSensitivity, .1f, .1f)) {
- cameraRepository.movementSensitivity = Math.max(0, cameraSensitivity[0]);
- }
- }
-
- private void shadingMode() {
- UIUtil.dynamicSpacing(405);
-
- ImGui.text("Shading");
-
- ImGui.sameLine();
- if (UIUtil.renderOption(Icons.grid_on + "##grid", editorRepository.gridOverlayObjects, true, editorRepository.accent)) {
- editorRepository.gridOverlayObjects = !editorRepository.gridOverlayObjects;
- }
-
- ImGui.sameLine();
- if (UIUtil.renderOption(Icons.details + "Wireframe##wireframeShading", engineRepository.debugShadingModel == DebugShadingModel.WIREFRAME, false, editorRepository.accent)) {
- engineRepository.debugShadingModel = DebugShadingModel.WIREFRAME;
- editorRepository.shadingModelOption.set(DebugShadingModel.WIREFRAME.getIndex());
- }
-
- ImGui.sameLine();
- if (UIUtil.renderOption(Icons.palette + "Random##randomShading", engineRepository.debugShadingModel == DebugShadingModel.RANDOM, false, editorRepository.accent)) {
- engineRepository.debugShadingModel = DebugShadingModel.RANDOM;
- editorRepository.shadingModelOption.set(DebugShadingModel.RANDOM.getIndex());
- }
-
- ImGui.sameLine();
- ImGui.setNextItemWidth(150);
- if (ImGui.combo("##shadingMode", editorRepository.shadingModelOption, SHADING_MODE_OPTIONS)) {
- engineRepository.debugShadingModel = DebugShadingModel.values()[editorRepository.shadingModelOption.get()];
- }
- }
-
-}
diff --git a/editor/src/main/java/com/pine/panels/inspector/AbstractResourceField.java b/editor/src/main/java/com/pine/panels/inspector/AbstractResourceField.java
deleted file mode 100644
index 3c8209d0..00000000
--- a/editor/src/main/java/com/pine/panels/inspector/AbstractResourceField.java
+++ /dev/null
@@ -1,79 +0,0 @@
-package com.pine.panels.inspector;
-
-import com.pine.core.AbstractView;
-import com.pine.injection.PInject;
-import com.pine.repository.FSEntry;
-import com.pine.repository.FilesRepository;
-import com.pine.repository.FoliageInstance;
-import com.pine.repository.streaming.StreamableResourceType;
-import com.pine.repository.streaming.StreamingRepository;
-import com.pine.theme.Icons;
-import imgui.ImGui;
-import imgui.type.ImInt;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Objects;
-
-public abstract class AbstractResourceField extends AbstractView {
- @PInject
- public StreamingRepository repository;
-
- @PInject
- public FilesRepository filesRepository;
-
- private final ImInt selected = new ImInt(0);
- private String[] itemsArr = new String[0];
- private int previousSize = -1;
- private final List allByType = new ArrayList<>();
- protected FoliageInstance foliage;
-
- public void setFoliage(FoliageInstance foliage) {
- this.foliage = foliage;
- }
-
- public abstract String getSelected();
-
- public abstract void setSelected(String selected);
-
- public abstract StreamableResourceType getType();
-
- private void refresh() {
- List byType = filesRepository.byType.get(getType());
- if (byType.size() != allByType.size()) {
- allByType.clear();
- for (var f : byType) {
- allByType.add(filesRepository.entry.get(f));
- }
- if (previousSize != allByType.size()) {
- previousSize = allByType.size();
- itemsArr = new String[allByType.size() + 1];
- itemsArr[0] = "None";
- for (int i = 0, allByTypeSize = allByType.size(); i < allByTypeSize; i++) {
- var file = allByType.get(i);
- itemsArr[i + 1] = file.name;
- }
-
- if (getSelected() != null) {
- for (int i = 0; i < allByType.size(); i++) {
- if (Objects.equals(allByType.get(i).getId(), getSelected())) {
- selected.set(i);
- }
- }
- }
- }
- }
- }
-
- @Override
- public void render() {
- refresh();
- if (ImGui.combo(imguiId + foliage.id, selected, itemsArr)) {
- if(selected.get() == 0){
- setSelected(null);
- }else {
- setSelected(allByType.get(selected.get() - 1).getId());
- }
- }
- }
-}
diff --git a/editor/src/main/java/com/pine/panels/inspector/FoliagePanel.java b/editor/src/main/java/com/pine/panels/inspector/FoliagePanel.java
deleted file mode 100644
index 65f3161e..00000000
--- a/editor/src/main/java/com/pine/panels/inspector/FoliagePanel.java
+++ /dev/null
@@ -1,105 +0,0 @@
-package com.pine.panels.inspector;
-
-import com.pine.core.AbstractView;
-import com.pine.injection.PInject;
-import com.pine.repository.*;
-import com.pine.repository.terrain.TerrainRepository;
-import com.pine.theme.Icons;
-import imgui.ImGui;
-import imgui.flag.ImGuiTableColumnFlags;
-import imgui.flag.ImGuiTableFlags;
-
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Objects;
-
-import static com.pine.theme.Icons.ONLY_ICON_BUTTON_SIZE;
-
-public class FoliagePanel extends AbstractView {
- public static final int TABLE_FLAGS = ImGuiTableFlags.Resizable | ImGuiTableFlags.RowBg | ImGuiTableFlags.NoBordersInBody;
-
- @PInject
- public EditorRepository editorRepository;
-
- @PInject
- public FilesRepository filesRepository;
-
- @PInject
- public TerrainRepository terrainRepository;
-
- private final Map toRemove = new HashMap<>();
- private AbstractResourceField materialField;
- private AbstractResourceField meshField;
-
- @Override
- public void onInitialize() {
- materialField = appendChild(new MaterialResourceField());
- meshField = appendChild(new MeshResourceField());
- }
-
- @Override
- public void render() {
- if (ImGui.button(Icons.add + "Add foliage" + imguiId)) {
- var instance = new FoliageInstance(terrainRepository.foliage.size() + 1);
- terrainRepository.foliage.put(instance.id, instance);
- }
- ImGui.dummy(0, 8);
- renderSelected();
- }
-
- private void renderSelected() {
- if (ImGui.beginTable("##foliage" + imguiId, 3, TABLE_FLAGS)) {
- ImGui.tableSetupColumn("Name", ImGuiTableColumnFlags.WidthStretch);
- ImGui.tableSetupColumn("Material", ImGuiTableColumnFlags.WidthStretch);
- ImGui.tableSetupColumn("Mesh", ImGuiTableColumnFlags.WidthStretch);
- ImGui.tableHeadersRow();
-
- for (FoliageInstance m : terrainRepository.foliage.values()) {
- FSEntry entry = filesRepository.entry.get(m.id);
-
- if (entry == null) {
- toRemove.put(m.id, true);
- continue;
- }
-
- ImGui.tableNextRow();
- ImGui.tableNextColumn();
- ImGui.text(entry.name);
- ImGui.sameLine();
- boolean isSelected = Objects.equals(editorRepository.foliageForPainting, m.id);
- if (ImGui.button((!isSelected ? Icons.check_box_outline_blank : Icons.check_box) + "##" + m.id, ONLY_ICON_BUTTON_SIZE, ONLY_ICON_BUTTON_SIZE)) {
- editorRepository.foliageForPainting = isSelected ? null : m.id;
- }
- ImGui.sameLine();
- if (ImGui.button(Icons.remove + "##" + m.id, ONLY_ICON_BUTTON_SIZE, ONLY_ICON_BUTTON_SIZE)) {
- toRemove.put(m.id, true);
- if (Objects.equals(editorRepository.foliageForPainting, m.id)) {
- editorRepository.foliageForPainting = null;
- }
- }
-
- ImGui.tableNextColumn();
- materialField.setFoliage(m);
- materialField.render();
-
- ImGui.tableNextColumn();
- meshField.setFoliage(m);
- meshField.render();
- }
- remove();
- ImGui.endTable();
- }
- }
-
- private void remove() {
- if (!toRemove.isEmpty()) {
- for (String e : toRemove.keySet()) {
- if (Objects.equals(e, editorRepository.foliageForPainting)) {
- editorRepository.foliageForPainting = null;
- }
- terrainRepository.foliage.remove(e);
- }
- toRemove.clear();
- }
- }
-}
diff --git a/editor/src/main/java/com/pine/panels/inspector/InspectorPanel.java b/editor/src/main/java/com/pine/panels/inspector/InspectorPanel.java
deleted file mode 100644
index 9a47d193..00000000
--- a/editor/src/main/java/com/pine/panels/inspector/InspectorPanel.java
+++ /dev/null
@@ -1,145 +0,0 @@
-package com.pine.panels.inspector;
-
-import com.pine.component.AbstractComponent;
-import com.pine.component.ComponentType;
-import com.pine.component.Entity;
-import com.pine.core.AbstractView;
-import com.pine.core.UIUtil;
-import com.pine.core.dock.AbstractDockPanel;
-import com.pine.injection.PInject;
-import com.pine.inspection.Inspectable;
-import com.pine.panels.component.FormPanel;
-import com.pine.repository.EditorRepository;
-import com.pine.repository.terrain.TerrainRepository;
-import com.pine.repository.WorldRepository;
-import com.pine.service.grid.WorldService;
-import com.pine.service.rendering.RequestProcessingService;
-import com.pine.service.request.AddComponentRequest;
-import com.pine.service.request.UpdateFieldRequest;
-import com.pine.theme.Icons;
-import imgui.ImGui;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Objects;
-import java.util.stream.Stream;
-
-public class InspectorPanel extends AbstractDockPanel {
- @PInject
- public RequestProcessingService requestProcessingService;
- @PInject
- public EditorRepository editorRepository;
- @PInject
- public WorldService worldService;
- @PInject
- public WorldRepository world;
- @PInject
- public TerrainRepository terrainRepository;
- @PInject
- public List repositories;
-
- private final List additionalInspection = new ArrayList<>();
-
- private Inspectable currentInspection;
- private Entity selected;
- private String selectedId;
- private final List types = new ArrayList<>();
- private FormPanel formPanel;
- private AbstractView foliagePanel;
-
- @Override
- public void onInitialize() {
- types.add(Icons.add + " Add component");
- types.addAll(Stream.of(ComponentType.values()).map(a -> a.getIcon() + a.getTitle()).toList());
- formPanel = appendChild(new FormPanel((dto, newValue) -> requestProcessingService.addRequest(new UpdateFieldRequest(dto, newValue))));
- foliagePanel = appendChild(new FoliagePanel());
- currentInspection = repositories.getFirst();
- }
-
- @Override
- public void render() {
- tick();
- ImGui.columns(2, "##inspectorColumns" + imguiId, false);
- ImGui.setColumnWidth(0, 30);
- for (var repo : repositories) {
- if (UIUtil.renderOption(repo.getIcon(), Objects.equals(currentInspection, repo), true, editorRepository.accent)) {
- currentInspection = repo;
- }
- }
-
- ImGui.spacing();
- ImGui.spacing();
- for (var additional : additionalInspection) {
- if (additional != null) {
- if (UIUtil.renderOption(additional.getIcon(), Objects.equals(currentInspection, additional), true, editorRepository.accent)) {
- currentInspection = additional;
- }
- }
- }
-
- ImGui.spacing();
- ImGui.spacing();
-
- ImGui.nextColumn();
- if (ImGui.beginChild(imguiId + "form")) {
- if (selected != null && additionalInspection.contains(currentInspection)) {
- if (ImGui.beginCombo(imguiId, types.getFirst())) {
- for (int i = 1; i < types.size(); i++) {
- String type = types.get(i);
- if (ImGui.selectable(type)) {
- ComponentType entityComponent = ComponentType.values()[i - 1];
- requestProcessingService.addRequest(new AddComponentRequest(entityComponent, selected));
- selected = null;
- selectedId = null;
- }
- }
- ImGui.endCombo();
- }
- }
-
-
- if (formPanel.getInspectable() != currentInspection) {
- formPanel.setInspection(currentInspection);
- }
-
- formPanel.render();
-
- if (Objects.equals(currentInspection, terrainRepository)) {
- foliagePanel.render();
- }
- }
- ImGui.endChild();
- ImGui.columns(1);
- }
-
- private void tick() {
- if (!Objects.equals(editorRepository.mainSelection, selectedId)) {
- additionalInspection.clear();
- selectedId = editorRepository.mainSelection;
-
- if (selectedId != null) {
- for (var tile : worldService.getLoadedTiles()) {
- if (tile != null) {
- selected = selectedId != null ? world.entityMap.get(selectedId) : null;
- if (selected != null) {
- additionalInspection.add(selected);
- world.runByComponent(this::addComponent, selectedId);
- currentInspection = additionalInspection.getFirst();
- break;
- }
- }
- }
- } else {
- selected = null;
- }
-
- if (selectedId != null && selected == null) {
- currentInspection = repositories.getFirst();
- }
- }
- }
-
- private void addComponent(AbstractComponent abstractComponent) {
- additionalInspection.add(abstractComponent);
- }
-}
diff --git a/editor/src/main/java/com/pine/panels/inspector/MaterialResourceField.java b/editor/src/main/java/com/pine/panels/inspector/MaterialResourceField.java
deleted file mode 100644
index 26c94721..00000000
--- a/editor/src/main/java/com/pine/panels/inspector/MaterialResourceField.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package com.pine.panels.inspector;
-
-import com.pine.repository.streaming.StreamableResourceType;
-
-public class MaterialResourceField extends AbstractResourceField {
- @Override
- public String getSelected() {
- return foliage.material;
- }
-
- @Override
- public void setSelected(String selected) {
- foliage.material = selected;
- }
-
- @Override
- public StreamableResourceType getType() {
- return StreamableResourceType.MATERIAL;
- }
-}
diff --git a/editor/src/main/java/com/pine/panels/inspector/MeshResourceField.java b/editor/src/main/java/com/pine/panels/inspector/MeshResourceField.java
deleted file mode 100644
index d9199200..00000000
--- a/editor/src/main/java/com/pine/panels/inspector/MeshResourceField.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package com.pine.panels.inspector;
-
-import com.pine.repository.streaming.StreamableResourceType;
-
-public class MeshResourceField extends AbstractResourceField {
- @Override
- public String getSelected() {
- return foliage.mesh;
- }
-
- @Override
- public void setSelected(String selected) {
- foliage.mesh = selected;
- }
-
- @Override
- public StreamableResourceType getType() {
- return StreamableResourceType.MESH;
- }
-}
diff --git a/editor/src/main/java/com/pine/panels/viewport/header/AbstractViewportSettingsPanel.java b/editor/src/main/java/com/pine/panels/viewport/header/AbstractViewportSettingsPanel.java
deleted file mode 100644
index 407b2c59..00000000
--- a/editor/src/main/java/com/pine/panels/viewport/header/AbstractViewportSettingsPanel.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package com.pine.panels.viewport.header;
-
-import com.pine.core.AbstractView;
-import com.pine.injection.PInject;
-import com.pine.repository.EditorRepository;
-import com.pine.service.streaming.StreamingService;
-
-public class AbstractViewportSettingsPanel extends AbstractView {
-
- @PInject
- public EditorRepository editorRepository;
-
- @PInject
- public StreamingService streamingService;
-
- public void renderOutside() {
-
- }
-}
diff --git a/editor/src/main/java/com/pine/panels/viewport/header/ViewportHeaderPanel.java b/editor/src/main/java/com/pine/panels/viewport/header/ViewportHeaderPanel.java
deleted file mode 100644
index 82867ad5..00000000
--- a/editor/src/main/java/com/pine/panels/viewport/header/ViewportHeaderPanel.java
+++ /dev/null
@@ -1,52 +0,0 @@
-package com.pine.panels.viewport.header;
-
-import com.pine.core.AbstractView;
-import com.pine.core.UIUtil;
-import com.pine.injection.PInject;
-import com.pine.repository.EditorMode;
-import com.pine.repository.EditorRepository;
-import imgui.ImGui;
-import imgui.ImVec2;
-import imgui.flag.ImGuiStyleVar;
-import imgui.flag.ImGuiWindowFlags;
-
-import static com.pine.core.dock.DockSpacePanel.FRAME_SIZE;
-
-public class ViewportHeaderPanel extends AbstractView {
- private static final int FLAGS = ImGuiWindowFlags.NoResize | ImGuiWindowFlags.NoTitleBar | ImGuiWindowFlags.NoMove | ImGuiWindowFlags.NoCollapse;
- private static final ImVec2 PADDING = new ImVec2(4, 4);
- private static final float HEIGHT = 35;
-
- @PInject
- public EditorRepository editorRepository;
-
- private AbstractViewportSettingsPanel paintGizmo;
- private AbstractViewportSettingsPanel gizmo;
-
- @Override
- public void onInitialize() {
- appendChild(gizmo = new GizmoSettingsPanel());
- appendChild(paintGizmo = new PaintingSettingsPanel());
- }
-
- @Override
- public void render() {
- AbstractViewportSettingsPanel currentPanel;
- if (editorRepository.editorMode == EditorMode.TRANSFORM) {
- currentPanel = gizmo;
- } else {
- currentPanel = paintGizmo;
- }
- ImGui.setNextWindowPos(ImGui.getWindowPosX(), ImGui.getWindowPosY() + FRAME_SIZE);
- ImGui.setNextWindowSize(ImGui.getWindowSizeX(), HEIGHT);
- ImGui.setNextWindowBgAlpha(.4f);
- ImGui.pushStyleVar(ImGuiStyleVar.WindowPadding, PADDING);
- ImGui.begin(imguiId, UIUtil.OPEN, FLAGS);
- ImGui.popStyleVar();
- currentPanel.render();
- ImGui.end();
-
- currentPanel.renderOutside();
- }
-
-}
diff --git a/editor/src/main/java/com/pine/tools/ToolsModule.java b/editor/src/main/java/com/pine/tools/ToolsModule.java
deleted file mode 100644
index e4b19fe9..00000000
--- a/editor/src/main/java/com/pine/tools/ToolsModule.java
+++ /dev/null
@@ -1,53 +0,0 @@
-package com.pine.tools;
-
-import com.pine.injection.EngineExternalModule;
-import com.pine.service.system.AbstractPass;
-import com.pine.service.system.impl.*;
-import com.pine.tools.repository.ToolsResourceRepository;
-import com.pine.tools.system.*;
-import com.pine.tools.system.outline.BoxOutlineGenPass;
-import com.pine.tools.system.outline.OutlineGenPass;
-import com.pine.tools.system.outline.OutlineRenderingPass;
-import com.pine.tools.system.outline.TerrainOutlineGenPass;
-
-import java.util.List;
-
-public class ToolsModule implements EngineExternalModule {
-
- @Override
- public AbstractPass[] getExternalSystems() {
- return new AbstractPass[]{
- new NoiseGenPass(),
- new BRDFGenPass(),
- new IrradianceGenPass(),
- new EnvironmentMapFilteringGenPass(),
- new ShaderDataSyncPass(),
- new FoliageCullingPass(),
- new TerrainGBufferPass(),
- new PaintGizmoPass(),
- new PrimitiveGBufferPass(),
- new FoliageGBufferPass(),
- new CopyDepthPass(),
- new DecalGBufferPass(),
- new IconsPass(),
- new GBufferShadingPass(),
- new AtmospherePass(),
- new CompositingPass(),
- new PostProcessingPass(),
- new GridPass(),
-
- new OutlineGenPass(),
- new TerrainOutlineGenPass(),
- new BoxOutlineGenPass(),
- new OutlineRenderingPass(),
- new PaintGizmoRenderingPass(),
- new VoxelVisualizerPass(),
- new FrameCompositionPass()
- };
- }
-
- @Override
- public List