player tank model
This commit is contained in:
parent
d63b6a5663
commit
dc88120ff8
13 changed files with 215 additions and 21 deletions
BIN
.blender/tank.blend
Normal file
BIN
.blender/tank.blend
Normal file
Binary file not shown.
BIN
.blender/tank.blend1
Normal file
BIN
.blender/tank.blend1
Normal file
Binary file not shown.
|
|
@ -3,6 +3,7 @@ extends Node3D
|
|||
var boxes: Array[CSGBox3D]
|
||||
var points: Array[Vector3]
|
||||
|
||||
const MAX_ENEMIES := 30
|
||||
const MAX_CACHED_POINTS := 100
|
||||
var doomed_point_idx := 0
|
||||
|
||||
|
|
@ -11,6 +12,8 @@ var weights: Array[float]
|
|||
var total_cost := 0.
|
||||
var money := 5.
|
||||
|
||||
var total_enemies := 0
|
||||
|
||||
var rng := RandomNumberGenerator.new()
|
||||
|
||||
func _get_point() -> Vector3:
|
||||
|
|
|
|||
BIN
models/tank.glb
Normal file
BIN
models/tank.glb
Normal file
Binary file not shown.
42
models/tank.glb.import
Normal file
42
models/tank.glb.import
Normal file
|
|
@ -0,0 +1,42 @@
|
|||
[remap]
|
||||
|
||||
importer="scene"
|
||||
importer_version=1
|
||||
type="PackedScene"
|
||||
uid="uid://54f44t3gniw2"
|
||||
path="res://.godot/imported/tank.glb-3907167ee0d98c32d67c9e3b5542cdd3.scn"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://models/tank.glb"
|
||||
dest_files=["res://.godot/imported/tank.glb-3907167ee0d98c32d67c9e3b5542cdd3.scn"]
|
||||
|
||||
[params]
|
||||
|
||||
nodes/root_type=""
|
||||
nodes/root_name=""
|
||||
nodes/root_script=null
|
||||
nodes/apply_root_scale=true
|
||||
nodes/root_scale=1.0
|
||||
nodes/import_as_skeleton_bones=false
|
||||
nodes/use_name_suffixes=true
|
||||
nodes/use_node_type_suffixes=true
|
||||
meshes/ensure_tangents=true
|
||||
meshes/generate_lods=true
|
||||
meshes/create_shadow_meshes=true
|
||||
meshes/light_baking=1
|
||||
meshes/lightmap_texel_size=0.2
|
||||
meshes/force_disable_compression=false
|
||||
skins/use_named_skins=true
|
||||
animation/import=true
|
||||
animation/fps=30
|
||||
animation/trimming=false
|
||||
animation/remove_immutable_tracks=true
|
||||
animation/import_rest_as_RESET=false
|
||||
import_script/path=""
|
||||
materials/extract=0
|
||||
materials/extract_format=0
|
||||
materials/extract_path=""
|
||||
_subresources={}
|
||||
gltf/naming_version=2
|
||||
gltf/embedded_image_handling=1
|
||||
BIN
models/tank_Untitled.png
Normal file
BIN
models/tank_Untitled.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 127 KiB |
44
models/tank_Untitled.png.import
Normal file
44
models/tank_Untitled.png.import
Normal file
|
|
@ -0,0 +1,44 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://c3558cp5qqb2t"
|
||||
path.s3tc="res://.godot/imported/tank_Untitled.png-7c9d9b048ab151d1bd129f409533fdda.s3tc.ctex"
|
||||
metadata={
|
||||
"imported_formats": ["s3tc_bptc"],
|
||||
"vram_texture": true
|
||||
}
|
||||
generator_parameters={
|
||||
"md5": "f494a15d45f8af8872c3bef56ef93744"
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://models/tank_Untitled.png"
|
||||
dest_files=["res://.godot/imported/tank_Untitled.png-7c9d9b048ab151d1bd129f409533fdda.s3tc.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=2
|
||||
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=true
|
||||
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=0
|
||||
BIN
models/tank_Untitled_1.png
Normal file
BIN
models/tank_Untitled_1.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 140 KiB |
44
models/tank_Untitled_1.png.import
Normal file
44
models/tank_Untitled_1.png.import
Normal file
|
|
@ -0,0 +1,44 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://qnwpvm1hx8p4"
|
||||
path.s3tc="res://.godot/imported/tank_Untitled_1.png-d7b40899902a4db16432bc0141be7a85.s3tc.ctex"
|
||||
metadata={
|
||||
"imported_formats": ["s3tc_bptc"],
|
||||
"vram_texture": true
|
||||
}
|
||||
generator_parameters={
|
||||
"md5": "c48dd504d1079dbf1ff534515af74348"
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://models/tank_Untitled_1.png"
|
||||
dest_files=["res://.godot/imported/tank_Untitled_1.png-d7b40899902a4db16432bc0141be7a85.s3tc.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=2
|
||||
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=true
|
||||
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=0
|
||||
BIN
models/tank_Untitled_2.png
Normal file
BIN
models/tank_Untitled_2.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 97 KiB |
44
models/tank_Untitled_2.png.import
Normal file
44
models/tank_Untitled_2.png.import
Normal file
|
|
@ -0,0 +1,44 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://ctcllt5wc0urr"
|
||||
path.s3tc="res://.godot/imported/tank_Untitled_2.png-7f4a2b559c3c0d49551b21471cfe6ea3.s3tc.ctex"
|
||||
metadata={
|
||||
"imported_formats": ["s3tc_bptc"],
|
||||
"vram_texture": true
|
||||
}
|
||||
generator_parameters={
|
||||
"md5": "6863b39f8e7c50e0200f2e2d1e249f1b"
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://models/tank_Untitled_2.png"
|
||||
dest_files=["res://.godot/imported/tank_Untitled_2.png-7f4a2b559c3c0d49551b21471cfe6ea3.s3tc.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=2
|
||||
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=true
|
||||
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=0
|
||||
|
|
@ -18,6 +18,7 @@ const MORTAR_IDX := 2
|
|||
static var instance: Player
|
||||
|
||||
@export var shake_noise: FastNoiseLite
|
||||
@export var cannon: Node3D
|
||||
var shake_duration := 0.
|
||||
@onready var camera_transform: Transform3D = %Camera3D.transform
|
||||
|
||||
|
|
@ -44,6 +45,11 @@ var gun_index := 0:
|
|||
var gun: Gun:
|
||||
get: return guns[gun_index]
|
||||
|
||||
func clean_angle(theta: float) -> float:
|
||||
theta = fposmod(theta, TAU)
|
||||
if theta < PI: return theta
|
||||
else: return PI - theta
|
||||
|
||||
func _init() -> void:
|
||||
instance = self
|
||||
|
||||
|
|
@ -62,7 +68,7 @@ func _process_movement(delta: float) -> void:
|
|||
input.normalized()
|
||||
var mul := 10. if DebugMenu.high_speed_hack else 1.
|
||||
var desired_velocity = Vector3(input.x, 0., input.y) * MOVE_SPEED * mul * speed_mul
|
||||
velocity = exp_lerp(velocity, desired_velocity, 20, delta)
|
||||
velocity = exp_lerp(velocity, desired_velocity, 5, delta)
|
||||
move_and_slide()
|
||||
|
||||
if Input.is_action_just_pressed("dash") and stamina >= DASH_COST and not input.is_zero_approx():
|
||||
|
|
@ -89,12 +95,13 @@ func _process_aim() -> void:
|
|||
|
||||
var t := -r_origin.y / r_dir.y
|
||||
var world_mouse_pos = r_origin + r_dir * t
|
||||
var to_mouse_pos = world_mouse_pos - global_position
|
||||
|
||||
var to_mouse_pos = to_local(world_mouse_pos)
|
||||
var angle = Vector2(to_mouse_pos.x, -to_mouse_pos.z).angle()
|
||||
%Cannon.rotation.y = angle
|
||||
aim_angle = angle
|
||||
|
||||
var cannon_to_mouse_pos = cannon.get_parent().to_local(world_mouse_pos)
|
||||
cannon.rotation.y = Vector2(cannon_to_mouse_pos.x, -cannon_to_mouse_pos.z).angle() + PI / 2
|
||||
|
||||
%Reticle.position = to_mouse_pos
|
||||
|
||||
func _process_shoot(delta: float) -> void:
|
||||
|
|
@ -157,6 +164,24 @@ func _process(delta: float) -> void:
|
|||
%MortarDecal.visible = gun_index == MORTAR_IDX
|
||||
%MortarDecal.global_position = %Reticle.global_position
|
||||
|
||||
var facing_dir := Vector2.RIGHT.rotated(%Tank.rotation.y)
|
||||
var new_dir := Vector2(velocity.x, -velocity.z).rotated(PI / 2)
|
||||
var opp_dir := new_dir.rotated(PI)
|
||||
|
||||
var new_dot = facing_dir.dot(new_dir)
|
||||
var opp_dot = facing_dir.dot(opp_dir)
|
||||
|
||||
if new_dot > opp_dot:
|
||||
%Tank.rotation.y = new_dir.angle()
|
||||
else:
|
||||
%Tank.rotation.y = opp_dir.angle()
|
||||
|
||||
# print("tank_angle = ", %Tank.rotation.y, "; angle = ", angle, "; angle2 = ", angle2)
|
||||
# if (abs(angle - %Tank.rotation.y) <= abs(angle2 - %Tank.rotation.y)):
|
||||
# %Tank.rotation.y = angle
|
||||
# else:
|
||||
# %Tank.rotation.y = angle2
|
||||
|
||||
func damage(damager: Node3D) -> void:
|
||||
if health <= 0: return
|
||||
if state == State.DASHING:
|
||||
|
|
|
|||
|
|
@ -9,16 +9,12 @@
|
|||
[ext_resource type="Script" uid="uid://urxp3pg8g2mh" path="res://player/health_bar.gd" id="7_boad6"]
|
||||
[ext_resource type="Shader" uid="uid://cf3h3knluytmm" path="res://player/hp_outline.gdshader" id="8_rgyib"]
|
||||
[ext_resource type="Script" uid="uid://ban0rphntn10r" path="res://player/stamina_bar.gd" id="9_hg6s5"]
|
||||
[ext_resource type="PackedScene" uid="uid://54f44t3gniw2" path="res://models/tank.glb" id="10_8t03j"]
|
||||
|
||||
[sub_resource type="FastNoiseLite" id="FastNoiseLite_onrkg"]
|
||||
|
||||
[sub_resource type="BoxMesh" id="BoxMesh_onrkg"]
|
||||
|
||||
[sub_resource type="BoxShape3D" id="BoxShape3D_i3pqv"]
|
||||
|
||||
[sub_resource type="BoxMesh" id="BoxMesh_hqtel"]
|
||||
size = Vector3(2, 0.1, 0.1)
|
||||
|
||||
[sub_resource type="SphereMesh" id="SphereMesh_4flbx"]
|
||||
|
||||
[sub_resource type="ViewportTexture" id="ViewportTexture_g6k8r"]
|
||||
|
|
@ -44,17 +40,14 @@ height = 256
|
|||
fill = 1
|
||||
fill_from = Vector2(0.5, 0.5)
|
||||
|
||||
[node name="Player" type="CharacterBody3D" unique_id=1904432250 node_paths=PackedStringArray("guns")]
|
||||
[node name="Player" type="CharacterBody3D" unique_id=1904432250 node_paths=PackedStringArray("cannon", "guns")]
|
||||
collision_layer = 2
|
||||
collision_mask = 13
|
||||
script = ExtResource("1_4flbx")
|
||||
shake_noise = SubResource("FastNoiseLite_onrkg")
|
||||
cannon = NodePath("Tank/Turret")
|
||||
guns = [NodePath("Guns/Sharpshooter"), NodePath("Guns/MiniGun"), NodePath("Guns/Mortar")]
|
||||
|
||||
[node name="MeshInstance3D" type="MeshInstance3D" parent="." unique_id=204505475]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
|
||||
mesh = SubResource("BoxMesh_onrkg")
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="." unique_id=918462062]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
|
||||
shape = SubResource("BoxShape3D_i3pqv")
|
||||
|
|
@ -63,13 +56,6 @@ shape = SubResource("BoxShape3D_i3pqv")
|
|||
unique_name_in_owner = true
|
||||
transform = Transform3D(1, 0, 0, 0, 0.53349644, 0.84580237, 0, -0.84580237, 0.53349644, 0, 20.150661, 11.874705)
|
||||
|
||||
[node name="Cannon" type="Node3D" parent="." unique_id=985210791]
|
||||
unique_name_in_owner = true
|
||||
|
||||
[node name="MeshInstance3D" type="MeshInstance3D" parent="Cannon" unique_id=1149215568]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0.75, 0)
|
||||
mesh = SubResource("BoxMesh_hqtel")
|
||||
|
||||
[node name="Reticle" type="MeshInstance3D" parent="." unique_id=242722222]
|
||||
unique_name_in_owner = true
|
||||
visible = false
|
||||
|
|
@ -270,3 +256,9 @@ size = Vector3(6.55249, 50.942444, 6.388672)
|
|||
texture_albedo = SubResource("GradientTexture2D_8t03j")
|
||||
modulate = Color(0.89, 0.40049997, 0.40049997, 1)
|
||||
cull_mask = 1
|
||||
|
||||
[node name="Tank" parent="." unique_id=1376341535 instance=ExtResource("10_8t03j")]
|
||||
unique_name_in_owner = true
|
||||
transform = Transform3D(-0.6377325, 0, -5.5752345e-08, 0, 0.6377325, 0, 5.5752345e-08, 0, -0.6377325, 0, 0.75759906, 0)
|
||||
|
||||
[editable path="Tank"]
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue