Handle 3D models in the asset store (#5427)

This commit is contained in:
D8H
2023-06-21 14:46:34 +02:00
committed by GitHub
parent 8851be03a3
commit 318099504c
10 changed files with 35 additions and 5 deletions
@@ -153,6 +153,8 @@ void CustomObjectConfiguration::ExposeResources(gd::ArbitraryResourceWorker& wor
worker.ExposeTileset(newPropertyValue);
} else if (resourceType == "bitmapFont") {
worker.ExposeBitmapFont(newPropertyValue);
} else if (resourceType == "model3D") {
worker.ExposeModel3D(newPropertyValue);
}
if (newPropertyValue != oldPropertyValue) {
+2 -2
View File
@@ -328,13 +328,13 @@ type ParticleEmitterObject_RendererType = 0 | 1 | 2`
shell.sed(
'-i',
/setKind\(kind: string\): void/,
"setKind(kind: 'image' | 'audio' | 'font' | 'video' | 'json' | 'tilemap' | 'tileset'): void",
"setKind(kind: 'image' | 'audio' | 'font' | 'video' | 'json' | 'tilemap' | 'tileset' | 'model3D'): void",
'types/gdresource.js'
);
shell.sed(
'-i',
/getKind\(\): string/,
"getKind(): 'image' | 'audio' | 'font' | 'video' | 'json' | 'tilemap' | 'tileset'",
"getKind(): 'image' | 'audio' | 'font' | 'video' | 'json' | 'tilemap' | 'tileset' | 'model3D'",
'types/gdresource.js'
);
+2 -2
View File
@@ -4,8 +4,8 @@ declare class gdResource {
clone(): gdResource;
setName(name: string): void;
getName(): string;
setKind(kind: 'image' | 'audio' | 'font' | 'video' | 'json' | 'tilemap' | 'tileset'): void;
getKind(): 'image' | 'audio' | 'font' | 'video' | 'json' | 'tilemap' | 'tileset';
setKind(kind: 'image' | 'audio' | 'font' | 'video' | 'json' | 'tilemap' | 'tileset' | 'model3D'): void;
getKind(): 'image' | 'audio' | 'font' | 'video' | 'json' | 'tilemap' | 'tileset' | 'model3D';
isUserAdded(): boolean;
setUserAdded(yes: boolean): void;
useFile(): boolean;
@@ -307,6 +307,7 @@ export const AssetStoreFilterPanel = ({
{ label: t`Sprite`, value: 'sprite' },
{ label: t`Tiled sprite`, value: 'tiled' },
{ label: t`Panel sprite`, value: '9patch' },
{ label: t`3D model`, value: 'model3D' },
]}
values={assetFiltersState.objectTypeFilter.objectTypes}
setValues={values => {
@@ -119,6 +119,8 @@ export const installResource = (
newResource = new gd.VideoResource();
} else if (serializedResource.kind === 'json') {
newResource = new gd.JsonResource();
} else if (serializedResource.kind === 'model3D') {
newResource = new gd.Model3DResource();
} else {
throw new Error(
`Resource of kind "${serializedResource.kind}" is not supported.`
@@ -49,6 +49,7 @@ const sortedContentType = [
'particleEmitter',
'font',
'audio',
'model3D',
'partial',
];
@@ -56,6 +57,7 @@ const contentTypeToMessageDescriptor = {
sprite: t`Sprites`,
'9patch': t`Panel sprites`,
tiled: t`Tiled sprites`,
model3D: t`3D model`,
particleEmitter: t`Particle emitters`,
font: t`Fonts`,
audio: t`Audios`,
@@ -210,6 +210,17 @@ export const ResourceCard = ({ resource, onChoose, size }: Props) => {
</Line>
</GenericCard>
);
case 'model3D':
return (
<GenericCard onChoose={onChoose} resource={resource} size={size}>
<Line justifyContent="center">
<FontDownload style={styles.icon} />
</Line>
<Line justifyContent="center">
<RaisedButton onClick={onChoose} label={<Trans>Choose</Trans>} />
</Line>
</GenericCard>
);
default:
return null;
}
@@ -28,5 +28,8 @@ describe('FileToCloudProjectResourceUploader', () => {
expect(getInputAcceptedMimesAndExtensions('video')).toMatchInlineSnapshot(
`"video/mp4,video/webm,.mp4,.webm"`
);
expect(getInputAcceptedMimesAndExtensions('model3D')).toMatchInlineSnapshot(
`"model/gltf-binary,.glb"`
);
});
});
@@ -88,7 +88,8 @@ type PrivateAssetPackAssetType =
| '9patch'
| 'tiled'
| 'partial'
| 'particleEmitter';
| 'particleEmitter'
| 'model3D';
export type PrivateAssetPackContent = { [PrivateAssetPackAssetType]: number };
@@ -45,3 +45,11 @@ export const SvgResource = () => (
</ResourceStoreStateProvider>
</FixedHeightFlexContainer>
);
export const Model3DResource = () => (
<FixedHeightFlexContainer height={400}>
<ResourceStoreStateProvider>
<ResourceStore onChoose={action('onChoose')} resourceKind="model3D" />
</ResourceStoreStateProvider>
</FixedHeightFlexContainer>
);