diff --git a/webapp/src/app/app.module.ts b/webapp/src/app/app.module.ts
index 481baaae..693bce2e 100644
--- a/webapp/src/app/app.module.ts
+++ b/webapp/src/app/app.module.ts
@@ -65,6 +65,7 @@ import { EnemySingleTypeWidgetComponent } from './components/widgets/enemy-singl
import { CustomDesTypeWidgetComponent } from './components/widgets/custom-des-type-widget/custom-des-type-widget.component';
import { AutofocusDirective } from './directives/autofocus.directive';
import { CombinedTooltipPipe } from './pipes/combined-tooltip.pipe';
+import { InputWithButtonComponent } from './components/widgets/inputs/input-with-button/input-with-button.component';
const WIDGETS = [
StringWidgetComponent,
@@ -141,6 +142,7 @@ const WIDGETS = [
HighlightDirective,
AutofocusDirective,
CombinedTooltipPipe,
+ InputWithButtonComponent,
],
bootstrap: [AppComponent],
})
diff --git a/webapp/src/app/components/widgets/character-widget/character-widget.component.html b/webapp/src/app/components/widgets/character-widget/character-widget.component.html
index 53703f6a..7534df6c 100644
--- a/webapp/src/app/components/widgets/character-widget/character-widget.component.html
+++ b/webapp/src/app/components/widgets/character-widget/character-widget.component.html
@@ -1,10 +1,7 @@
-
-
-
-
+
diff --git a/webapp/src/app/components/widgets/character-widget/character-widget.component.ts b/webapp/src/app/components/widgets/character-widget/character-widget.component.ts
index 6c4ce613..6a04b660 100644
--- a/webapp/src/app/components/widgets/character-widget/character-widget.component.ts
+++ b/webapp/src/app/components/widgets/character-widget/character-widget.component.ts
@@ -66,10 +66,6 @@ export class CharacterWidgetComponent extends OverlayWidget {
ogProp = '';
}
- this.comp.manualKey = this.key;
- this.comp.manualValue = ogProp;
- this.comp.manualValueChange.subscribe(v => this.setPropType(v, true));
-
this.setPropType(ogProp);
await this.updateProps();
this.updateRightSide();
@@ -88,7 +84,6 @@ export class CharacterWidgetComponent extends OverlayWidget {
if (updateRightSide) {
this.updateRightSide();
}
- this.comp.manualValue = prop;
}
private updateRightSide() {
diff --git a/webapp/src/app/components/widgets/custom-des-type-widget/custom-des-type-widget.component.html b/webapp/src/app/components/widgets/custom-des-type-widget/custom-des-type-widget.component.html
index 913f8f2e..d4c2b897 100644
--- a/webapp/src/app/components/widgets/custom-des-type-widget/custom-des-type-widget.component.html
+++ b/webapp/src/app/components/widgets/custom-des-type-widget/custom-des-type-widget.component.html
@@ -1,6 +1,7 @@
-
-
-
-
+
diff --git a/webapp/src/app/components/widgets/enemy-single-type-widget/enemy-single-type-widget.component.html b/webapp/src/app/components/widgets/enemy-single-type-widget/enemy-single-type-widget.component.html
index 53703f6a..7534df6c 100644
--- a/webapp/src/app/components/widgets/enemy-single-type-widget/enemy-single-type-widget.component.html
+++ b/webapp/src/app/components/widgets/enemy-single-type-widget/enemy-single-type-widget.component.html
@@ -1,10 +1,7 @@
-
-
-
-
+
diff --git a/webapp/src/app/components/widgets/enemy-single-type-widget/enemy-single-type-widget.component.ts b/webapp/src/app/components/widgets/enemy-single-type-widget/enemy-single-type-widget.component.ts
index 2f22ab54..549ff711 100644
--- a/webapp/src/app/components/widgets/enemy-single-type-widget/enemy-single-type-widget.component.ts
+++ b/webapp/src/app/components/widgets/enemy-single-type-widget/enemy-single-type-widget.component.ts
@@ -61,10 +61,6 @@ export class EnemySingleTypeWidgetComponent extends OverlayWidget {
};
this.rightGroup.click = prop => this.setPropType(prop);
- this.comp.manualKey = this.key;
- this.comp.manualValue = this.settings[this.key];
- this.comp.manualValueChange.subscribe(v => this.setPropType(v, true));
-
this.setPropType(this.settings[this.key] ?? '');
await this.updateProps();
this.updateRightSide();
@@ -83,7 +79,6 @@ export class EnemySingleTypeWidgetComponent extends OverlayWidget {
if (updateRightSide) {
this.updateRightSide();
}
- this.comp.manualValue = prop;
}
private updateRightSide() {
diff --git a/webapp/src/app/components/widgets/inputs/input-with-button/input-with-button.component.html b/webapp/src/app/components/widgets/inputs/input-with-button/input-with-button.component.html
new file mode 100644
index 00000000..ea8dacbc
--- /dev/null
+++ b/webapp/src/app/components/widgets/inputs/input-with-button/input-with-button.component.html
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
diff --git a/webapp/src/app/components/widgets/inputs/input-with-button/input-with-button.component.scss b/webapp/src/app/components/widgets/inputs/input-with-button/input-with-button.component.scss
new file mode 100644
index 00000000..e1bed288
--- /dev/null
+++ b/webapp/src/app/components/widgets/inputs/input-with-button/input-with-button.component.scss
@@ -0,0 +1,22 @@
+@use '@angular/material' as mat;
+
+input.default-input {
+ outline: none;
+}
+
+.input-container {
+ @include mat.icon-button-density(-4);
+
+ display: flex;
+ align-items: center;
+ overflow: hidden;
+
+ mat-icon {
+ font-size: 20px;
+ }
+
+ &::ng-deep.mat-mdc-button-touch-target {
+ width: 32px;
+ height: 32px;
+ }
+}
diff --git a/webapp/src/app/components/widgets/inputs/input-with-button/input-with-button.component.ts b/webapp/src/app/components/widgets/inputs/input-with-button/input-with-button.component.ts
new file mode 100644
index 00000000..b90a2907
--- /dev/null
+++ b/webapp/src/app/components/widgets/inputs/input-with-button/input-with-button.component.ts
@@ -0,0 +1,21 @@
+import { Component, EventEmitter, Input, Output } from '@angular/core';
+import { CommonModule } from '@angular/common';
+import { MatTooltipModule } from '@angular/material/tooltip';
+import { FormsModule } from '@angular/forms';
+import { MatButtonModule } from '@angular/material/button';
+import { MatIconModule } from '@angular/material/icon';
+
+@Component({
+ selector: 'app-input-with-button',
+ standalone: true,
+ imports: [CommonModule, MatTooltipModule, FormsModule, MatButtonModule, MatIconModule],
+ templateUrl: './input-with-button.component.html',
+ styleUrls: ['./input-with-button.component.scss', '../../widget.scss']
+})
+export class InputWithButtonComponent {
+ @Input() description?: string;
+ @Input() key = '';
+ @Input() model?: string;
+ @Output() modelChange = new EventEmitter();
+ @Output() buttonClick = new EventEmitter();
+}
diff --git a/webapp/src/app/services/phaser/entities/registry/item-destruct.ts b/webapp/src/app/services/phaser/entities/registry/item-destruct.ts
index 66a18d61..9aeff56a 100644
--- a/webapp/src/app/services/phaser/entities/registry/item-destruct.ts
+++ b/webapp/src/app/services/phaser/entities/registry/item-destruct.ts
@@ -2,7 +2,7 @@ import { Helper } from '../../helper';
import { Anims, AnimSheet } from '../../sheet-parser';
import { DefaultEntity } from './default-entity';
import { Point3 } from '../../../../models/cross-code-map';
-import { EntityAttributes } from '../cc-entity';
+import { AttributeValue, EntityAttributes } from '../cc-entity';
import { EnemyInfo } from './enemy';
import { SheetReference } from './destructible';
import { GlobalSettings } from '../../global-settings';
@@ -36,7 +36,15 @@ export class ItemDestruct extends DefaultEntity {
override getAttributes(): EntityAttributes {
const attributes = super.getAttributes();
attributes['desType'].type = 'CustomDesType';
- return attributes;
+ attributes['__GLOBAL__'] = {
+ type: 'String',
+ description: 'Global settings for destructible object',
+ };
+ const objOrder: { [key in keyof ItemDestructAttributes]: null } = {
+ desType: null,
+ __GLOBAL__: null
+ };
+ return Object.assign(objOrder, attributes);
}
protected override async setupType(settings: any) {