From e7fb9bacf3ebb5209f90f412757c35276af51e85 Mon Sep 17 00:00:00 2001 From: Anson Bridges Date: Tue, 11 Oct 2022 00:15:48 -0400 Subject: ai cannon-manning state machine --- godot/scenes/GameBase.tscn | 4 +-- godot/scenes/ballistics/Cannonball.tscn | 6 ++-- godot/scenes/characters/PlayerRigid.tscn | 33 +++++++++++++++---- godot/scenes/environment/BallBarrel.gd | 10 ++++++ godot/scenes/environment/BallBarrel.tscn | 31 ++++++++++++++++++ godot/scenes/machines/Cannon.tscn | 13 +++++--- godot/scenes/vehicles/Gunbrig.tscn | 55 +++++++++++++++++++++++++++++--- godot/scenes/worldprops/ball_bucket.tscn | 1 + 8 files changed, 131 insertions(+), 22 deletions(-) create mode 100644 godot/scenes/environment/BallBarrel.gd create mode 100644 godot/scenes/environment/BallBarrel.tscn (limited to 'godot/scenes') diff --git a/godot/scenes/GameBase.tscn b/godot/scenes/GameBase.tscn index 1f09aa2..c339c37 100644 --- a/godot/scenes/GameBase.tscn +++ b/godot/scenes/GameBase.tscn @@ -9,7 +9,7 @@ script = ExtResource( 3 ) [node name="Water" parent="." instance=ExtResource( 1 )] -transform = Transform( 6000, 0, 0, 0, 100, 0, 0, 0, 6000, 0, 0, 0 ) +transform = Transform( 10000, 0, 0, 0, 100, 0, 0, 0, 10000, 0, 0, 0 ) [node name="WORLDGEO" type="Spatial" parent="."] @@ -27,5 +27,5 @@ far = 8192.0 [node name="PLAYERCAM" type="ClippedCamera" parent="."] near = 0.01 -far = 520.7 +far = 2000.0 script = ExtResource( 4 ) diff --git a/godot/scenes/ballistics/Cannonball.tscn b/godot/scenes/ballistics/Cannonball.tscn index b9d5a0d..8412fee 100644 --- a/godot/scenes/ballistics/Cannonball.tscn +++ b/godot/scenes/ballistics/Cannonball.tscn @@ -14,6 +14,7 @@ rings = 8 [sub_resource type="OpenSimplexNoise" id=4] [sub_resource type="NoiseTexture" id=5] +seamless = true as_normalmap = true bump_strength = 8.7 noise = SubResource( 4 ) @@ -43,12 +44,11 @@ shape = SubResource( 1 ) mesh = SubResource( 2 ) material/0 = SubResource( 3 ) -[node name="CarryArea" type="Area" parent="."] +[node name="PickupArea" type="Area" parent="."] collision_layer = 2 collision_mask = 2 -monitoring = false -[node name="CollisionShape" type="CollisionShape" parent="CarryArea"] +[node name="CollisionShape" type="CollisionShape" parent="PickupArea"] shape = SubResource( 6 ) [connection signal="body_entered" from="." to="." method="_on_collision"] diff --git a/godot/scenes/characters/PlayerRigid.tscn b/godot/scenes/characters/PlayerRigid.tscn index bc5f588..d66655a 100644 --- a/godot/scenes/characters/PlayerRigid.tscn +++ b/godot/scenes/characters/PlayerRigid.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=14 format=2] +[gd_scene load_steps=18 format=2] [ext_resource path="res://scripts/characters/player_controller_new.gd" type="Script" id=1] [ext_resource path="res://theming/Rapscallion-q341.ttf" type="DynamicFontData" id=2] @@ -8,6 +8,9 @@ [ext_resource path="res://scenes/weapons/pistol.tres" type="Resource" id=6] [ext_resource path="res://scenes/weapons/rockets.tres" type="Resource" id=7] [ext_resource path="res://scenes/weapons/grapplinghook.tres" type="Resource" id=8] +[ext_resource path="res://scripts/fsm/StateMachine.gd" type="Script" id=9] +[ext_resource path="res://scripts/characters/ManCannon.gd" type="Script" id=10] +[ext_resource path="res://scripts/characters/Idle.gd" type="Script" id=11] [sub_resource type="PhysicsMaterial" id=8] resource_local_to_scene = true @@ -28,7 +31,10 @@ font_data = ExtResource( 2 ) [sub_resource type="BoxShape" id=1] extents = Vector3( 0.325, 0.9, 0.325 ) -[node name="Soldier" type="RigidBody" groups=["playable", "player"]] +[sub_resource type="SphereShape" id=9] +radius = 50.0 + +[node name="Marine" type="RigidBody" groups=["playable", "player"]] collision_layer = 32769 collision_mask = 32769 mode = 2 @@ -93,11 +99,8 @@ transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.9, 0 ) mesh = SubResource( 4 ) [node name="NavigationAgent" type="NavigationAgent" parent="."] -path_desired_distance = 1.5 -target_desired_distance = 1.5 -agent_height_offset = -0.5 -path_max_distance = 1.0 -neighbor_dist = 15.0 +avoidance_enabled = true +radius = 0.3 [node name="Nametag" type="Label3D" parent="."] transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2.08522, 0 ) @@ -115,5 +118,21 @@ script = ExtResource( 3 ) [node name="Collision" type="CollisionShape" parent="AreaDetect"] shape = SubResource( 1 ) +[node name="AISearchArea" type="Area" parent="."] +monitorable = false + +[node name="Collision" type="CollisionShape" parent="AISearchArea"] +shape = SubResource( 9 ) + +[node name="AIStateMachine" type="Node" parent="."] +script = ExtResource( 9 ) +initial_state = NodePath("Idle") + +[node name="Idle" type="Node" parent="AIStateMachine"] +script = ExtResource( 11 ) + +[node name="ManCannon" type="Node" parent="AIStateMachine"] +script = ExtResource( 10 ) + [connection signal="area_entered" from="AreaDetect" to="AreaDetect" method="_on_AreaDetect_area_entered"] [connection signal="area_exited" from="AreaDetect" to="AreaDetect" method="_on_AreaDetect_area_exited"] diff --git a/godot/scenes/environment/BallBarrel.gd b/godot/scenes/environment/BallBarrel.gd new file mode 100644 index 0000000..80b721e --- /dev/null +++ b/godot/scenes/environment/BallBarrel.gd @@ -0,0 +1,10 @@ +extends RigidBody + +const balls_max = 100 +onready var balls_left = balls_max + +func use_generic(player: NetChar) -> void: + if balls_left > 0 and player.inventory["cannonball"] < player.inventory_caps["cannonball"]: + player.inventory["cannonball"] += 1 + balls_left -= 1 + player.rset("inventory", player.inventory) diff --git a/godot/scenes/environment/BallBarrel.tscn b/godot/scenes/environment/BallBarrel.tscn new file mode 100644 index 0000000..4378d7e --- /dev/null +++ b/godot/scenes/environment/BallBarrel.tscn @@ -0,0 +1,31 @@ +[gd_scene load_steps=6 format=2] + +[ext_resource path="res://meshes/barrel.tres" type="ArrayMesh" id=1] +[ext_resource path="res://scenes/environment/BallBarrel.gd" type="Script" id=2] + +[sub_resource type="PhysicsMaterial" id=3] +resource_local_to_scene = true + +[sub_resource type="CylinderShape" id=1] +height = 1.18356 +radius = 0.597426 + +[sub_resource type="BoxShape" id=2] +extents = Vector3( 0.62804, 0.686083, 0.635326 ) + +[node name="BallBarrel" type="RigidBody"] +mass = 400.0 +physics_material_override = SubResource( 3 ) +script = ExtResource( 2 ) + +[node name="CollisionShape" type="CollisionShape" parent="."] +shape = SubResource( 1 ) + +[node name="MeshInstance" type="MeshInstance" parent="."] +mesh = ExtResource( 1 ) + +[node name="UseArea" type="Area" parent="."] +monitoring = false + +[node name="CollisionShape" type="CollisionShape" parent="UseArea"] +shape = SubResource( 2 ) diff --git a/godot/scenes/machines/Cannon.tscn b/godot/scenes/machines/Cannon.tscn index 9bcd95d..182ff8a 100644 --- a/godot/scenes/machines/Cannon.tscn +++ b/godot/scenes/machines/Cannon.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=10 format=2] +[gd_scene load_steps=9 format=2] [ext_resource path="res://scripts/machines/Cannon.gd" type="Script" id=1] [ext_resource path="res://sounds/explode.wav" type="AudioStream" id=2] @@ -6,9 +6,6 @@ [ext_resource path="res://meshes/cannon_base.tres" type="ArrayMesh" id=4] [ext_resource path="res://theming/FreeMono.otf" type="DynamicFontData" id=5] -[sub_resource type="PhysicsMaterial" id=8] -rough = true - [sub_resource type="BoxShape" id=1] extents = Vector3( 1, 0.5, 0.5 ) @@ -23,7 +20,7 @@ font_data = ExtResource( 5 ) [node name="Cannon" type="RigidBody"] mass = 3180.0 -physics_material_override = SubResource( 8 ) +linear_damp = 0.0 script = ExtResource( 1 ) [node name="CollisionShape" type="CollisionShape" parent="."] @@ -69,3 +66,9 @@ transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -0.748, 1.143, 0 ) billboard = 2 text = "!" font = SubResource( 9 ) + +[node name="NavigationObstacle" type="NavigationObstacle" parent="."] +estimate_radius = false + +[node name="AINavPoint" type="Spatial" parent="."] +transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -1.392, 0, 0 ) diff --git a/godot/scenes/vehicles/Gunbrig.tscn b/godot/scenes/vehicles/Gunbrig.tscn index 70a30ad..250eb69 100644 --- a/godot/scenes/vehicles/Gunbrig.tscn +++ b/godot/scenes/vehicles/Gunbrig.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=25 format=2] +[gd_scene load_steps=29 format=2] [ext_resource path="res://scripts/vehicles/Gunboat.gd" type="Script" id=1] [ext_resource path="res://scenes/machines/Cannon.tscn" type="PackedScene" id=2] @@ -12,8 +12,10 @@ [ext_resource path="res://scenes/environment/Cable.tscn" type="PackedScene" id=10] [ext_resource path="res://meshes/ship_components/rudder.tres" type="ArrayMesh" id=11] [ext_resource path="res://scenes/vehicles/ship_parts/SquareSail.tscn" type="PackedScene" id=12] +[ext_resource path="res://scenes/environment/BallBarrel.tscn" type="PackedScene" id=13] [sub_resource type="PhysicsMaterial" id=28] +resource_local_to_scene = true rough = true [sub_resource type="BoxShape" id=5] @@ -22,6 +24,9 @@ extents = Vector3( 0.2, 0.2, 0.2 ) [sub_resource type="CubeMesh" id=6] size = Vector3( 0.4, 0.4, 0.4 ) +[sub_resource type="PhysicsMaterial" id=50] +resource_local_to_scene = true + [sub_resource type="BoxShape" id=7] extents = Vector3( 0.1, 0.1, 0.1 ) @@ -45,17 +50,23 @@ extents = Vector3( 1.20173, 0.287114, 1.17431 ) extents = Vector3( 0.294164, 0.287114, 7.50894 ) [sub_resource type="NavigationMesh" id=26] -vertices = PoolVector3Array( -11.5351, 2.7234, -0.635424, -10.5351, 2.7234, -1.13542, -10.5351, 2.7234, -3.13542, -13.5351, 2.7234, -3.13542, -13.5351, 2.7234, 2.86458, -10.5351, 2.7234, 2.86458, -11.5351, 2.7234, -0.635424, -13.5351, 2.7234, -3.13542, 9.46486, 1.9734, 2.86458, 10.9649, 1.7234, 2.86458, 13.4649, 1.9734, 0.864576, 12.4649, 1.9734, -1.63542, 9.46486, 1.9734, -3.13542, -4.03514, 0.473404, 2.36458, -3.53514, 0.473404, 1.36458, -4.53514, 0.473404, 0.864576, -9.53514, 0.473404, 2.36458, -4.53514, 0.473404, -0.635424, -3.03514, 0.473404, -1.13542, -3.03514, 0.473404, -2.63542, -9.53514, 0.473404, -2.13542, -4.53514, 0.473404, 0.864576, -4.53514, 0.473404, -0.635424, -9.53514, 0.473404, -2.13542, -9.53514, 0.473404, 2.36458, -2.03514, 0.473404, 0.364576, -3.53514, 0.473404, 1.36458, -4.03514, 0.473404, 2.36458, 1.46486, 0.473404, 2.86458, -3.03514, 0.473404, -2.63542, -3.03514, 0.473404, -1.13542, -2.03514, 0.473404, 0.364576, 1.46486, 0.473404, 2.86458, 7.96486, 0.473404, 2.86458, 7.96486, 0.473404, -2.63542 ) -polygons = [ PoolIntArray( 1, 0, 2 ), PoolIntArray( 2, 0, 3 ), PoolIntArray( 5, 4, 6 ), PoolIntArray( 6, 4, 7 ), PoolIntArray( 9, 8, 10 ), PoolIntArray( 10, 8, 11 ), PoolIntArray( 11, 8, 12 ), PoolIntArray( 14, 13, 15 ), PoolIntArray( 15, 13, 16 ), PoolIntArray( 18, 17, 19 ), PoolIntArray( 19, 17, 20 ), PoolIntArray( 21, 24, 22 ), PoolIntArray( 22, 24, 23 ), PoolIntArray( 26, 25, 27 ), PoolIntArray( 27, 25, 28 ), PoolIntArray( 30, 29, 31 ), PoolIntArray( 31, 29, 32 ), PoolIntArray( 32, 29, 33 ), PoolIntArray( 33, 29, 34 ) ] +vertices = PoolVector3Array( -11.5351, 2.7234, -0.635424, -10.5351, 2.7234, -1.13542, -10.5351, 2.7234, -3.13542, -13.5351, 2.7234, -3.13542, -13.5351, 2.7234, 2.86458, -10.5351, 2.7234, 2.86458, -11.5351, 2.7234, -0.635424, -13.5351, 2.7234, -3.13542, 9.46486, 1.9734, 2.86458, 10.9649, 1.7234, 2.86458, 13.4649, 1.9734, 0.864576, 12.4649, 1.9734, -1.63542, 9.46486, 1.9734, -3.13542, -4.03514, 0.473404, 2.36458, -3.53514, 0.473404, 1.36458, -4.53514, 0.473404, 0.864576, -9.53514, 0.473404, 2.36458, -4.53514, 0.473404, -0.635424, -2.53514, 0.473404, -1.13542, -2.53514, 0.473404, -2.63542, -9.53514, 0.473404, -2.13542, -4.53514, 0.473404, 0.864576, -4.53514, 0.473404, -0.635424, -9.53514, 0.473404, -2.13542, -9.53514, 0.473404, 2.36458, -2.53514, 0.473404, -2.63542, -2.53514, 0.473404, -1.13542, -1.03514, 0.473404, -0.635424, 7.96486, 0.473404, -2.63542, -1.03514, 0.473404, 0.864576, -3.53514, 0.473404, 1.36458, -4.03514, 0.473404, 2.36458, 1.46486, 0.473404, 2.86458, -1.03514, 0.473404, -0.635424, -1.03514, 0.473404, 0.864576, 1.46486, 0.473404, 2.86458, 7.96486, 0.473404, 2.86458, 7.96486, 0.473404, -2.63542 ) +polygons = [ PoolIntArray( 1, 0, 2 ), PoolIntArray( 2, 0, 3 ), PoolIntArray( 5, 4, 6 ), PoolIntArray( 6, 4, 7 ), PoolIntArray( 9, 8, 10 ), PoolIntArray( 10, 8, 11 ), PoolIntArray( 11, 8, 12 ), PoolIntArray( 14, 13, 15 ), PoolIntArray( 15, 13, 16 ), PoolIntArray( 18, 17, 19 ), PoolIntArray( 19, 17, 20 ), PoolIntArray( 21, 24, 22 ), PoolIntArray( 22, 24, 23 ), PoolIntArray( 26, 25, 27 ), PoolIntArray( 27, 25, 28 ), PoolIntArray( 30, 29, 31 ), PoolIntArray( 31, 29, 32 ), PoolIntArray( 34, 33, 35 ), PoolIntArray( 35, 33, 36 ), PoolIntArray( 36, 33, 37 ) ] cell_size = 0.5 agent_height = 1.8 agent_radius = 0.18 agent_max_slope = 46.0 region_min_size = 3.0 +[sub_resource type="CubeMesh" id=51] +size = Vector3( 2, 2, 1.1 ) + [sub_resource type="BoxShape" id=36] extents = Vector3( 10.0294, 0.598376, 0.166381 ) +[sub_resource type="PhysicsMaterial" id=49] +resource_local_to_scene = true + [node name="Gunbrig" type="RigidBody"] mass = 238000.0 physics_material_override = SubResource( 28 ) @@ -77,39 +88,63 @@ mesh = SubResource( 6 ) [node name="Cannon" parent="ARTILLERY" instance=ExtResource( 2 )] transform = Transform( 1.31134e-07, 0, -1, 0, 1, 0, 1, 0, 1.31134e-07, 6.33448, 0.107111, 3.3196 ) +mode = 3 +physics_material_override = SubResource( 50 ) [node name="Cannon2" parent="ARTILLERY" instance=ExtResource( 2 )] transform = Transform( 1.31134e-07, 0, -1, 0, 1, 0, 1, 0, 1.31134e-07, 3.36645, 0.107111, 3.3196 ) +mode = 3 +physics_material_override = SubResource( 50 ) [node name="Cannon3" parent="ARTILLERY" instance=ExtResource( 2 )] transform = Transform( 1.31134e-07, 0, -1, 0, 1, 0, 1, 0, 1.31134e-07, 0.322236, 0.107111, 3.3196 ) +mode = 3 +physics_material_override = SubResource( 50 ) [node name="Cannon4" parent="ARTILLERY" instance=ExtResource( 2 )] transform = Transform( 1.31134e-07, 0, -1, 0, 1, 0, 1, 0, 1.31134e-07, -2.66973, 0.107111, 3.21655 ) +mode = 3 +physics_material_override = SubResource( 50 ) [node name="Cannon5" parent="ARTILLERY" instance=ExtResource( 2 )] transform = Transform( 1.31134e-07, 0, -1, 0, 1, 0, 1, 0, 1.31134e-07, -5.62184, 0.107111, 3.19748 ) +mode = 3 +physics_material_override = SubResource( 50 ) [node name="Cannon6" parent="ARTILLERY" instance=ExtResource( 2 )] transform = Transform( 1.31134e-07, 0, -1, 0, 1, 0, 1, 0, 1.31134e-07, -8.72409, 0.107111, 2.8206 ) +mode = 3 +physics_material_override = SubResource( 50 ) [node name="Cannon7" parent="ARTILLERY" instance=ExtResource( 2 )] transform = Transform( -0.0811907, 0, 0.996699, 0, 1, 0, -0.996699, 0, -0.0811907, -8.6751, 0.107111, -2.89481 ) +mode = 3 +physics_material_override = SubResource( 50 ) [node name="Cannon8" parent="ARTILLERY" instance=ExtResource( 2 )] transform = Transform( -2.18557e-07, 0, 1, 0, 1, 0, -1, 0, -2.18557e-07, -5.70608, 0.107111, -3.29825 ) +mode = 3 +physics_material_override = SubResource( 50 ) [node name="Cannon9" parent="ARTILLERY" instance=ExtResource( 2 )] transform = Transform( -2.18557e-07, 0, 1, 0, 1, 0, -1, 0, -2.18557e-07, -2.67884, 0.107111, -3.31267 ) +mode = 3 +physics_material_override = SubResource( 50 ) [node name="Cannon10" parent="ARTILLERY" instance=ExtResource( 2 )] transform = Transform( -2.18557e-07, 0, 1, 0, 1, 0, -1, 0, -2.18557e-07, 0.421378, 0.107111, -3.35383 ) +mode = 3 +physics_material_override = SubResource( 50 ) [node name="Cannon11" parent="ARTILLERY" instance=ExtResource( 2 )] transform = Transform( 0.0172777, 0, 0.999851, 0, 1, 0, -0.999851, 0, 0.0172777, 3.36481, 0.107111, -3.38258 ) +mode = 3 +physics_material_override = SubResource( 50 ) [node name="Cannon12" parent="ARTILLERY" instance=ExtResource( 2 )] transform = Transform( -2.18557e-07, 0, 1, 0, 1, 0, -1, 0, -2.18557e-07, 6.37315, 0.107111, -3.35613 ) +mode = 3 +physics_material_override = SubResource( 50 ) [node name="FloatPoints" type="Spatial" parent="."] @@ -285,7 +320,7 @@ transform = Transform( 0.949512, -0.0304534, 0, 0.0304534, 0.949512, 0, 0, 0, 0. transform = Transform( 0.797373, -0.0647854, 0, 0.0647854, 0.797373, 0, 0, 0, 0.8, -3.33794, 24.7801, 0 ) [node name="CollisionShape" type="CollisionShape" parent="."] -transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -3.3912, 5.52662, 0.0706616 ) +transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -3.29681, 5.52662, 0.0706616 ) shape = SubResource( 33 ) [node name="CollisionShape2" type="CollisionShape" parent="."] @@ -298,7 +333,6 @@ shape = SubResource( 35 ) [node name="NavigationMeshInstance" type="NavigationMeshInstance" parent="."] navmesh = SubResource( 26 ) -enabled = false [node name="Hull" type="MeshInstance" parent="NavigationMeshInstance"] visible = false @@ -350,6 +384,11 @@ transform = Transform( 0.926234, 1.7263e-09, 0.0323448, 0.0323448, -1.10483e-07, visible = false mesh = ExtResource( 7 ) +[node name="MeshInstance" type="MeshInstance" parent="NavigationMeshInstance"] +transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -2.60567, 0.683043, 0 ) +visible = false +mesh = SubResource( 51 ) + [node name="GunwhaleR" type="CollisionShape" parent="."] transform = Transform( 0.999486, 0, -0.0320562, 0, 1, 0, 0.0320562, 0, 0.999486, -0.646409, 0.658986, 3.50438 ) shape = SubResource( 36 ) @@ -358,4 +397,10 @@ shape = SubResource( 36 ) transform = Transform( 0.999486, 0, 0.0320562, 0, 1, 0, -0.0320562, 0, 0.999486, -0.646409, 0.658986, -3.46571 ) shape = SubResource( 36 ) +[node name="BallBarrel" parent="." instance=ExtResource( 13 )] +transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -1.93881, 0.836955, 0.05643 ) +mode = 1 +mass = 0.01 +physics_material_override = SubResource( 49 ) + [connection signal="navigation_mesh_changed" from="NavigationMeshInstance" to="NavigationMeshInstance" method="mesh_changed"] diff --git a/godot/scenes/worldprops/ball_bucket.tscn b/godot/scenes/worldprops/ball_bucket.tscn index d85a2fc..25a454e 100644 --- a/godot/scenes/worldprops/ball_bucket.tscn +++ b/godot/scenes/worldprops/ball_bucket.tscn @@ -11,6 +11,7 @@ albedo_color = Color( 0.266667, 0.168627, 0.0235294, 1 ) metallic_specular = 0.0 [node name="ball_bucket" type="StaticBody"] +collision_layer = 0 [node name="CollisionShape" type="CollisionShape" parent="."] shape = SubResource( 1 ) -- cgit v1.2.3