Release 0.2.0: device-aware controls, spear, settings, shaders
Show touch controls only on touch platforms and keyboard hints only on desktop, via a shared Controls.use_touch_ui() gate (is_touchscreen_available is unreliable with emulate_touch_from_mouse). Bumps version to 0.2.0. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Binary file not shown.
|
After Width: | Height: | Size: 393 KiB |
@@ -0,0 +1,40 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://cf0mk32r40fbb"
|
||||
path="res://.godot/imported/aerial.png-6f0c31ec14797100c056557b8d5f36d8.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://tools/preview/aerial.png"
|
||||
dest_files=["res://.godot/imported/aerial.png-6f0c31ec14797100c056557b8d5f36d8.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 465 KiB |
@@ -0,0 +1,40 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://qx85guumsl7p"
|
||||
path="res://.godot/imported/top.png-1fab202f4dd35d955a9e4ea2d0fefe58.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://tools/preview/top.png"
|
||||
dest_files=["res://.godot/imported/top.png-1fab202f4dd35d955a9e4ea2d0fefe58.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
@@ -0,0 +1,65 @@
|
||||
extends SceneTree
|
||||
## Top-down + angled aerial of the arena with the crowd, plus axis markers, to locate
|
||||
## the ruined section and any billboards left floating over it.
|
||||
## godot --script tools/preview_topdown.gd
|
||||
## Output: tools/preview/top.png (ortho top-down), tools/preview/aerial.png
|
||||
|
||||
const OUT := "res://tools/preview"
|
||||
|
||||
|
||||
func _init() -> void:
|
||||
_run.call_deferred()
|
||||
|
||||
|
||||
func _run() -> void:
|
||||
DirAccess.make_dir_recursive_absolute(OUT)
|
||||
var scene := (load("res://scene.tscn") as PackedScene).instantiate()
|
||||
root.add_child(scene)
|
||||
current_scene = scene
|
||||
|
||||
# Axis markers: red pillar at +X (east), green at +Z (south), so directions read.
|
||||
_marker(scene, Vector3(18, 5, 0), Color(1, 0.2, 0.2))
|
||||
_marker(scene, Vector3(0, 5, 18), Color(0.2, 1, 0.2))
|
||||
|
||||
await create_timer(0.4).timeout
|
||||
var crowd := scene.get_node_or_null(^"CrowdBillboards") as MultiMeshInstance3D
|
||||
if crowd != null and crowd.multimesh != null:
|
||||
print("crowd instances = ", crowd.multimesh.instance_count)
|
||||
|
||||
var top := Camera3D.new()
|
||||
top.projection = Camera3D.PROJECTION_ORTHOGONAL
|
||||
top.size = 46.0
|
||||
scene.add_child(top)
|
||||
top.look_at_from_position(Vector3(0, 60, 0.01), Vector3.ZERO, Vector3(0, 0, -1))
|
||||
top.current = true
|
||||
await create_timer(0.2).timeout
|
||||
_shot("top.png")
|
||||
|
||||
var air := Camera3D.new()
|
||||
air.fov = 60.0
|
||||
scene.add_child(air)
|
||||
air.look_at_from_position(Vector3(0, 26, 34), Vector3(0, 3, 0), Vector3.UP)
|
||||
air.current = true
|
||||
await create_timer(0.2).timeout
|
||||
_shot("aerial.png")
|
||||
quit(0)
|
||||
|
||||
|
||||
func _marker(scene: Node, pos: Vector3, col: Color) -> void:
|
||||
var m := MeshInstance3D.new()
|
||||
var box := BoxMesh.new()
|
||||
box.size = Vector3(1.5, 10.0, 1.5)
|
||||
var mat := StandardMaterial3D.new()
|
||||
mat.shading_mode = BaseMaterial3D.SHADING_MODE_UNSHADED
|
||||
mat.albedo_color = col
|
||||
box.material = mat
|
||||
m.mesh = box
|
||||
scene.add_child(m)
|
||||
m.global_position = pos
|
||||
|
||||
|
||||
func _shot(name: String) -> void:
|
||||
var img := root.get_viewport().get_texture().get_image()
|
||||
if img != null:
|
||||
img.save_png(OUT + "/" + name)
|
||||
print("captured ", name)
|
||||
@@ -0,0 +1 @@
|
||||
uid://dfcfb205scjvt
|
||||
Reference in New Issue
Block a user