mirror of
https://github.com/WolfangT/pixel-crusade.git
synced 2026-02-16 07:11:15 -05:00
update to mouse camera control
This commit is contained in:
Binary file not shown.
@@ -15,11 +15,67 @@ run/main_scene="uid://cyo30vhqp8aod"
|
||||
config/features=PackedStringArray("4.4", "GL Compatibility")
|
||||
config/icon="res://icon.svg"
|
||||
|
||||
[autoload]
|
||||
|
||||
GameManager="*res://src/game_manager.gd"
|
||||
|
||||
[editor]
|
||||
|
||||
version_control/plugin_name="GitPlugin"
|
||||
version_control/autoload_on_startup=true
|
||||
|
||||
[input]
|
||||
|
||||
move_left={
|
||||
"deadzone": 0.2,
|
||||
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":65,"key_label":0,"unicode":97,"location":0,"echo":false,"script":null)
|
||||
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194319,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
|
||||
]
|
||||
}
|
||||
move_right={
|
||||
"deadzone": 0.2,
|
||||
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":68,"key_label":0,"unicode":100,"location":0,"echo":false,"script":null)
|
||||
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194321,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
|
||||
]
|
||||
}
|
||||
move_forward={
|
||||
"deadzone": 0.2,
|
||||
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":87,"key_label":0,"unicode":119,"location":0,"echo":false,"script":null)
|
||||
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194320,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
|
||||
]
|
||||
}
|
||||
move_back={
|
||||
"deadzone": 0.2,
|
||||
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":83,"key_label":0,"unicode":115,"location":0,"echo":false,"script":null)
|
||||
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194322,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
|
||||
]
|
||||
}
|
||||
activate_unit={
|
||||
"deadzone": 0.2,
|
||||
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":32,"key_label":0,"unicode":32,"location":0,"echo":false,"script":null)
|
||||
]
|
||||
}
|
||||
select_unit={
|
||||
"deadzone": 0.2,
|
||||
"events": [Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"button_mask":0,"position":Vector2(0, 0),"global_position":Vector2(0, 0),"factor":1.0,"button_index":1,"canceled":false,"pressed":false,"double_click":false,"script":null)
|
||||
]
|
||||
}
|
||||
deselect_unit={
|
||||
"deadzone": 0.2,
|
||||
"events": [Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"button_mask":0,"position":Vector2(0, 0),"global_position":Vector2(0, 0),"factor":1.0,"button_index":2,"canceled":false,"pressed":false,"double_click":false,"script":null)
|
||||
]
|
||||
}
|
||||
zoom_in={
|
||||
"deadzone": 0.2,
|
||||
"events": [Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"button_mask":0,"position":Vector2(0, 0),"global_position":Vector2(0, 0),"factor":1.0,"button_index":4,"canceled":false,"pressed":false,"double_click":false,"script":null)
|
||||
]
|
||||
}
|
||||
zoom_out={
|
||||
"deadzone": 0.2,
|
||||
"events": [Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"button_mask":0,"position":Vector2(0, 0),"global_position":Vector2(0, 0),"factor":1.0,"button_index":5,"canceled":false,"pressed":false,"double_click":false,"script":null)
|
||||
]
|
||||
}
|
||||
|
||||
[rendering]
|
||||
|
||||
renderer/rendering_method="gl_compatibility"
|
||||
|
||||
@@ -1,14 +1,19 @@
|
||||
extends Node
|
||||
class_name Model
|
||||
|
||||
## Pixel to meters ratio.
|
||||
const PIXEL_SIZE := 0.0048
|
||||
## Scale from the miniature scale to real size.
|
||||
const HEROIC_SCALE := 57.2
|
||||
## Width to Height ratio of the image.
|
||||
const W_H_RATIO := 1.4
|
||||
|
||||
# Basic Variables
|
||||
@export var ModelName: String
|
||||
@export var CustomName: String
|
||||
@export var MovementDistance: int
|
||||
@export var BaseSize: String # In mm
|
||||
## In mm.
|
||||
@export var BaseSize: String
|
||||
@export var MovementType: String
|
||||
@export var RangeCharacteristic: DiceModifier
|
||||
@export var MeleeCharacteristic: DiceModifier
|
||||
50
src/base_model.tscn
Normal file
50
src/base_model.tscn
Normal file
@@ -0,0 +1,50 @@
|
||||
[gd_scene load_steps=9 format=3 uid="uid://c26jufswfi2bh"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://di5g5x80wtaw7" path="res://src/base_model.gd" id="1_ni6nx"]
|
||||
|
||||
[sub_resource type="Gradient" id="Gradient_fqpka"]
|
||||
offsets = PackedFloat32Array(0, 0.632124, 1)
|
||||
colors = PackedColorArray(0, 0, 0, 1, 0.310881, 0.310881, 0.310881, 1, 1, 1, 1, 1)
|
||||
|
||||
[sub_resource type="GradientTexture2D" id="GradientTexture2D_f2ut7"]
|
||||
gradient = SubResource("Gradient_fqpka")
|
||||
fill = 1
|
||||
|
||||
[sub_resource type="Gradient" id="Gradient_hq8bp"]
|
||||
offsets = PackedFloat32Array(0, 0.439024, 1)
|
||||
colors = PackedColorArray(1, 1, 1, 1, 0.282927, 0.282927, 0.282927, 1, 0, 0, 0, 1)
|
||||
|
||||
[sub_resource type="GradientTexture2D" id="GradientTexture2D_lcex4"]
|
||||
gradient = SubResource("Gradient_hq8bp")
|
||||
fill = 1
|
||||
|
||||
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_f2ut7"]
|
||||
albedo_color = Color(1, 0.0470588, 1, 1)
|
||||
albedo_texture = SubResource("GradientTexture2D_f2ut7")
|
||||
metallic = 0.6
|
||||
metallic_texture = SubResource("GradientTexture2D_lcex4")
|
||||
|
||||
[sub_resource type="CylinderShape3D" id="CylinderShape3D_wfmmx"]
|
||||
|
||||
[sub_resource type="SceneReplicationConfig" id="SceneReplicationConfig_04rm0"]
|
||||
|
||||
[node name="BaseModel" type="CharacterBody3D"]
|
||||
script = ExtResource("1_ni6nx")
|
||||
|
||||
[node name="Pivot" type="Node3D" parent="."]
|
||||
|
||||
[node name="Sprite2D" type="Sprite3D" parent="Pivot"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.30011, 0)
|
||||
pixel_size = 0.0048
|
||||
billboard = 2
|
||||
|
||||
[node name="Base" type="MeshInstance3D" parent="Pivot"]
|
||||
transform = Transform3D(57.2, 0, 0, 0, 57.2, 0, 0, 0, 57.2, 0, 0, 0)
|
||||
material_override = SubResource("StandardMaterial3D_f2ut7")
|
||||
skeleton = NodePath("")
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="."]
|
||||
shape = SubResource("CylinderShape3D_wfmmx")
|
||||
|
||||
[node name="MultiplayerSynchronizer" type="MultiplayerSynchronizer" parent="."]
|
||||
replication_config = SubResource("SceneReplicationConfig_04rm0")
|
||||
53
src/camera_pivot.gd
Normal file
53
src/camera_pivot.gd
Normal file
@@ -0,0 +1,53 @@
|
||||
extends Node3D
|
||||
|
||||
## Speed of the camera
|
||||
@export var CAMERA_SPEED := 10
|
||||
## Min y distance of the camera
|
||||
@export var MIN_ZOOM := 6
|
||||
## Max y distance of the camera
|
||||
@export var MAX_ZOOM := 18
|
||||
|
||||
@export var MOUSE_SENSITIVITY := 0.5
|
||||
@export var TILT_LOWER_LIMIT := deg_to_rad(-10.0)
|
||||
@export var TILT_UPPER_LIMIT := deg_to_rad(80.0)
|
||||
|
||||
var zoom := 6.0
|
||||
var _mouse_rotation := Vector2.ZERO
|
||||
var _mouse_input := Vector2.ZERO
|
||||
|
||||
# Called when the node enters the scene tree for the first time.
|
||||
func _ready() -> void:
|
||||
pass # Replace with function body.
|
||||
Input.mouse_mode = Input.MOUSE_MODE_CAPTURED
|
||||
|
||||
# Called every frame. 'delta' is the elapsed time since the previous frame.
|
||||
func _process(delta: float) -> void:
|
||||
_update_camera(delta)
|
||||
if Input.is_action_pressed("move_right"):
|
||||
position.x += CAMERA_SPEED * delta
|
||||
if Input.is_action_pressed("move_left"):
|
||||
position.x -= CAMERA_SPEED * delta
|
||||
if Input.is_action_pressed("move_back"):
|
||||
position.z += CAMERA_SPEED * delta
|
||||
if Input.is_action_pressed("move_forward"):
|
||||
position.z -= CAMERA_SPEED * delta
|
||||
if Input.is_action_just_released("zoom_in"):
|
||||
zoom -= CAMERA_SPEED * delta
|
||||
if Input.is_action_just_released("zoom_out"):
|
||||
zoom += CAMERA_SPEED * delta
|
||||
zoom = clamp(zoom, MIN_ZOOM, MAX_ZOOM)
|
||||
$Camera3D.position.y = zoom
|
||||
|
||||
func _unhandled_input(event):
|
||||
if event is InputEventMouseMotion and Input.get_mouse_mode() == Input.MOUSE_MODE_CAPTURED:
|
||||
_mouse_input.x = -event.relative.x * MOUSE_SENSITIVITY
|
||||
_mouse_input.y = -event.relative.y * MOUSE_SENSITIVITY
|
||||
|
||||
func _update_camera(delta):
|
||||
_mouse_rotation.x += _mouse_input.x * delta
|
||||
_mouse_rotation.x = clamp(_mouse_rotation.x, TILT_UPPER_LIMIT, TILT_UPPER_LIMIT)
|
||||
_mouse_rotation.y += _mouse_input.y * delta
|
||||
_mouse_input = Vector2.ZERO
|
||||
$Camera3D.transform.basis = Basis.from_euler(Vector3(_mouse_rotation.y, 0.0, 0.0))
|
||||
#CAMERA_CONTROLLER.rotation.z = 0.0
|
||||
global_transform.basis = Basis.from_euler(Vector3(0.0, _mouse_rotation.x, 0.0))
|
||||
1
src/camera_pivot.gd.uid
Normal file
1
src/camera_pivot.gd.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://dsio3o1q73f1q
|
||||
84
src/game_manager.gd
Normal file
84
src/game_manager.gd
Normal file
@@ -0,0 +1,84 @@
|
||||
extends Node
|
||||
|
||||
# id: {
|
||||
# 'name': '...',
|
||||
# 'models': [
|
||||
# {
|
||||
# name: "...",
|
||||
# activated_this_turn: bool,
|
||||
# },
|
||||
# ],
|
||||
# }
|
||||
## List of current players.
|
||||
var Players := {}
|
||||
|
||||
## Number turns to play.
|
||||
@export var max_turns := 0
|
||||
|
||||
## Number of the current turn.
|
||||
@export var current_turn_number := 0
|
||||
|
||||
## ID of the current Player to play.
|
||||
@export var current_activation_player := 0
|
||||
|
||||
## Array of players id to cycle forplay order.
|
||||
@export var players_activation_order := []
|
||||
@export var players_activation_order_index = 0
|
||||
|
||||
func set_up_game() -> void:
|
||||
print("Start of game")
|
||||
current_turn_number = 0
|
||||
start_turn()
|
||||
|
||||
func start_turn() -> void:
|
||||
current_turn_number += 1
|
||||
print("Start of turn %s of %s" % [current_turn_number, max_turns])
|
||||
# Set Players activation order.
|
||||
players_activation_order_index = 0
|
||||
players_activation_order = []
|
||||
for id in Players:
|
||||
players_activation_order.append(id)
|
||||
players_activation_order.sort_custom(_sort_players_by_units_left)
|
||||
|
||||
func next_activation() -> void:
|
||||
# Check that there are players with not activated models
|
||||
var successfuly_activated := false
|
||||
for _i in range(len(Players)):
|
||||
var player = _alternate_over_players()
|
||||
for model in player.models:
|
||||
if not model.activated_this_turn:
|
||||
successfuly_activated = true
|
||||
break
|
||||
if successfuly_activated:
|
||||
break
|
||||
if not successfuly_activated:
|
||||
end_turn()
|
||||
|
||||
|
||||
func end_turn() -> void:
|
||||
print("End of turn %s of %s" % [current_turn_number, max_turns])
|
||||
if current_turn_number >= max_turns:
|
||||
end_game()
|
||||
|
||||
func end_game() -> void:
|
||||
print("End of game")
|
||||
pass
|
||||
|
||||
# Utility functions
|
||||
|
||||
func _sort_players_by_units_left(a, b) -> bool:
|
||||
var player_a_models := 0
|
||||
for model in Players[a].models:
|
||||
if model.in_action:
|
||||
player_a_models += 1
|
||||
var player_b_models := 0
|
||||
for model in Players[b].models:
|
||||
if model.in_action:
|
||||
player_b_models += 1
|
||||
return player_a_models < player_b_models
|
||||
|
||||
func _alternate_over_players() -> Dictionary:
|
||||
players_activation_order_index += 1
|
||||
if players_activation_order_index >= len(players_activation_order):
|
||||
players_activation_order_index = 0
|
||||
return Players[players_activation_order[players_activation_order_index]]
|
||||
1
src/game_manager.gd.uid
Normal file
1
src/game_manager.gd.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://diynhg88ldrpu
|
||||
@@ -8,4 +8,4 @@ func _ready() -> void:
|
||||
|
||||
# Called every frame. 'delta' is the elapsed time since the previous frame.
|
||||
func _process(delta: float) -> void:
|
||||
pass
|
||||
pass
|
||||
@@ -1,6 +1,7 @@
|
||||
[gd_scene load_steps=7 format=3 uid="uid://budrvmnmxvk2d"]
|
||||
[gd_scene load_steps=8 format=3 uid="uid://budrvmnmxvk2d"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://b5kn17oto74o" path="res://src/main_game.gd" id="1_fq370"]
|
||||
[ext_resource type="Script" uid="uid://dsio3o1q73f1q" path="res://src/camera_pivot.gd" id="2_3vl0c"]
|
||||
[ext_resource type="PackedScene" uid="uid://ds20afeq5fbty" path="res://src/models/combat_priest.tscn" id="2_78si8"]
|
||||
[ext_resource type="Texture2D" uid="uid://c3ydthu2vpopv" path="res://assets/dev_512_gr_032x.jpg" id="3_aptux"]
|
||||
|
||||
@@ -17,14 +18,15 @@ size = Vector3(10, 1, 10)
|
||||
script = ExtResource("1_fq370")
|
||||
|
||||
[node name="CameraPivot" type="Node3D" parent="."]
|
||||
transform = Transform3D(1, 0, 0, 0, 0.34202, -0.939692, 0, 0.939692, 0.34202, 0, 0, 0)
|
||||
script = ExtResource("2_3vl0c")
|
||||
|
||||
[node name="Camera3D" type="Camera3D" parent="CameraPivot"]
|
||||
transform = Transform3D(1, 0, 0, 0, 0.707107, 0.707107, 0, -0.707107, 0.707107, 0, 5, 5)
|
||||
|
||||
[node name="DirectionalLight3D" type="DirectionalLight3D" parent="CameraPivot"]
|
||||
transform = Transform3D(1, 0, 0, 0, -4.37114e-08, 1, 0, -1, -4.37114e-08, 0, 5, 0)
|
||||
transform = Transform3D(1, 0, 0, 0, -4.37114e-08, 1, 0, -1, -4.37114e-08, 0, 10, 0)
|
||||
keep_aspect = 0
|
||||
|
||||
[node name="BaseModel" parent="." instance=ExtResource("2_78si8")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.723289, 0)
|
||||
|
||||
[node name="StaticBody3D" type="StaticBody3D" parent="."]
|
||||
|
||||
@@ -36,3 +38,7 @@ shape = SubResource("BoxShape3D_78si8")
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.5, 0)
|
||||
material_override = SubResource("StandardMaterial3D_3vl0c")
|
||||
mesh = SubResource("BoxMesh_aptux")
|
||||
|
||||
[node name="DirectionalLight3D" type="DirectionalLight3D" parent="."]
|
||||
transform = Transform3D(1, 0, 0, 0, -0.707107, 0.707107, 0, -0.707107, -0.707107, 0, 10, -10)
|
||||
shadow_enabled = true
|
||||
|
||||
@@ -1,22 +0,0 @@
|
||||
[gd_scene load_steps=3 format=3 uid="uid://c26jufswfi2bh"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://di5g5x80wtaw7" path="res://src/models/base_model.gd" id="1_ni6nx"]
|
||||
|
||||
[sub_resource type="CylinderShape3D" id="CylinderShape3D_wfmmx"]
|
||||
|
||||
[node name="BaseModel" type="CharacterBody3D"]
|
||||
script = ExtResource("1_ni6nx")
|
||||
|
||||
[node name="Pivot" type="Node3D" parent="."]
|
||||
|
||||
[node name="Sprite2D" type="Sprite3D" parent="Pivot"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.30011, 0)
|
||||
pixel_size = 0.0048
|
||||
billboard = 2
|
||||
|
||||
[node name="Base" type="MeshInstance3D" parent="Pivot"]
|
||||
transform = Transform3D(57.2, 0, 0, 0, 57.2, 0, 0, 0, 57.2, 0, 0, 0)
|
||||
skeleton = NodePath("")
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="."]
|
||||
shape = SubResource("CylinderShape3D_wfmmx")
|
||||
@@ -1,6 +1,6 @@
|
||||
[gd_scene load_steps=7 format=3 uid="uid://ds20afeq5fbty"]
|
||||
|
||||
[ext_resource type="PackedScene" uid="uid://c26jufswfi2bh" path="res://src/models/base_model.tscn" id="1_t6p38"]
|
||||
[ext_resource type="PackedScene" uid="uid://c26jufswfi2bh" path="res://src/base_model.tscn" id="1_t6p38"]
|
||||
[ext_resource type="Script" uid="uid://4h1cvticrj7u" path="res://src/utils/dice_modifier.gd" id="2_ni6nx"]
|
||||
[ext_resource type="Texture2D" uid="uid://cc85nihxm3set" path="res://assets/cartas/combat_priest_pixel.png" id="3_ni6nx"]
|
||||
|
||||
|
||||
BIN
webrtc/lib/~libwebrtc_native.windows.template_debug.x86_64.dll
Normal file
BIN
webrtc/lib/~libwebrtc_native.windows.template_debug.x86_64.dll
Normal file
Binary file not shown.
Reference in New Issue
Block a user