add model base

This commit is contained in:
2025-04-29 18:28:53 -04:00
parent c9252a9f0b
commit 19289e49be
62 changed files with 181212 additions and 237 deletions

78
src/models/base_model.gd Normal file
View File

@@ -0,0 +1,78 @@
extends Node
const PIXEL_SIZE := 0.0048
const HEROIC_SCALE := 57.2
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
@export var MovementType: String
@export var RangeCharacteristic: DiceModifier
@export var MeleeCharacteristic: DiceModifier
@export var ArmorCharacteristic: DiceModifier
@export var KeywordsList: Array[String]
@export var CharacterSprite2D: CompressedTexture2D
func _init() -> void:
pass
# Called when the node enters the scene tree for the first time.
func _ready() -> void:
var base_model := _get_base_model(BaseSize)
var base_size = _get_base_size(BaseSize)
if $Pivot/Base.mesh == null and base_model != null:
$Pivot/Base.mesh = load(base_model)
$Pivot/Base.scale.x = HEROIC_SCALE / 1000
$Pivot/Base.scale.y = HEROIC_SCALE / 1000
$Pivot/Base.scale.z = HEROIC_SCALE / 1000
if $Pivot/Sprite2D.texture == null and CharacterSprite2D != null:
$Pivot/Sprite2D.texture = CharacterSprite2D
$Pivot/Sprite2D.pixel_size = PIXEL_SIZE
$Pivot/Sprite2D.position.y = base_size * W_H_RATIO * HEROIC_SCALE / 2
$CollisionShape3D.shape.radius = base_size / 2 * HEROIC_SCALE
$CollisionShape3D.shape.height = base_size * 1.4 * HEROIC_SCALE
$CollisionShape3D.position.y = base_size * 0.7 * HEROIC_SCALE * W_H_RATIO / 2
# Called every frame. 'delta' is the elapsed time since the previous frame.
func _process(_delta: float) -> void:
pass
# Utility functions
func _get_base_model(size: String) -> String:
match size:
"25":
return "res://assets/bases/base_25.glb"
"32":
return "res://assets/bases/base_32.obj"
"40":
return "res://assets/bases/base_40.glb"
"50":
return "res://assets/bases/base_50.glb"
"50":
return "res://assets/bases/base_60.glb"
"30x60":
return "res://assets/bases/base_30x60.glb"
return ""
func _get_base_size(size: String) -> float:
match size:
"25":
return 25.0 / 1000
"32":
return 32.0 / 1000
"40":
return 40.0 / 1000
"50":
return 50.0 / 1000
"50":
return 60.0 / 1000
"30x60":
return 60.0 / 1000
push_error("Not valid size of %s" % size)
return 0

View File

@@ -0,0 +1 @@
uid://di5g5x80wtaw7

View File

@@ -0,0 +1,22 @@
[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")

View File

@@ -1,22 +1,43 @@
[gd_scene load_steps=4 format=3 uid="uid://c26jufswfi2bh"]
[gd_scene load_steps=7 format=3 uid="uid://ds20afeq5fbty"]
[ext_resource type="Texture2D" uid="uid://dn2uhj5jnbcj1" path="res://assets/cartas/combat_priest.png" id="1_iwweb"]
[ext_resource type="PackedScene" uid="uid://jcm4ger3ns40" path="res://assets/bases/Bases Papel-base_32.glb" id="2_ni6nx"]
[ext_resource type="PackedScene" uid="uid://c26jufswfi2bh" path="res://src/models/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"]
[sub_resource type="CylinderShape3D" id="CylinderShape3D_wfmmx"]
[sub_resource type="Resource" id="Resource_wfmmx"]
script = ExtResource("2_ni6nx")
extra = 0
dice = 2
fixed = 0
metadata/_custom_type_script = "uid://4h1cvticrj7u"
[node name="Model" type="CharacterBody3D"]
[sub_resource type="Resource" id="Resource_s0nyo"]
script = ExtResource("2_ni6nx")
extra = 0
dice = 2
fixed = 0
metadata/_custom_type_script = "uid://4h1cvticrj7u"
[node name="Pivot" type="Node3D" parent="."]
[sub_resource type="Resource" id="Resource_l764g"]
script = ExtResource("2_ni6nx")
extra = 0
dice = 0
fixed = 0
metadata/_custom_type_script = "uid://4h1cvticrj7u"
[node name="Sprite3D" 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
texture = ExtResource("1_iwweb")
[node name="BaseModel" instance=ExtResource("1_t6p38")]
ModelName = " Heretic Priest "
MovementDistance = 6
BaseSize = "32"
MovementType = "Infantry"
RangeCharacteristic = SubResource("Resource_wfmmx")
MeleeCharacteristic = SubResource("Resource_s0nyo")
ArmorCharacteristic = SubResource("Resource_l764g")
KeywordsList = Array[String](["HERETIC", "ELITE", "TOUGH", "LEADER"])
CharacterSprite2D = ExtResource("3_ni6nx")
[node name="Base" parent="Pivot" instance=ExtResource("2_ni6nx")]
transform = Transform3D(57.2, 0, 0, 0, 57.2, 0, 0, 0, 57.2, 0, 0, 0)
[node name="Sprite2D" parent="Pivot" index="0"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0)
[node name="CollisionShape3D" type="CollisionShape3D" parent="."]
shape = SubResource("CylinderShape3D_wfmmx")
[node name="Base" parent="Pivot" index="1"]
transform = Transform3D(0.057, 0, 0, 0, -2.49155e-09, 0.057, 0, -0.057, -2.49155e-09, 0, 0, 0)