mirror of
https://github.com/Crocmagnon/charasheet.git
synced 2024-11-04 22:03:56 +01:00
Display modifier next to weapon
This commit is contained in:
parent
4ee558b12d
commit
3846778d00
8 changed files with 83 additions and 3 deletions
|
@ -145,6 +145,7 @@ class CharacterAdmin(admin.ModelAdmin):
|
|||
"defense",
|
||||
"mana_max",
|
||||
"recovery_points_max",
|
||||
"luck_points_max",
|
||||
]
|
||||
filter_horizontal = [
|
||||
"capabilities",
|
||||
|
|
18
src/character/migrations/0019_weapon_category.py
Normal file
18
src/character/migrations/0019_weapon_category.py
Normal file
|
@ -0,0 +1,18 @@
|
|||
# Generated by Django 4.1.2 on 2022-10-30 23:14
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
("character", "0018_character_damage_reduction"),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name="weapon",
|
||||
name="category",
|
||||
field=models.CharField(default="NON", max_length=3),
|
||||
),
|
||||
]
|
26
src/character/migrations/0020_alter_weapon_category.py
Normal file
26
src/character/migrations/0020_alter_weapon_category.py
Normal file
|
@ -0,0 +1,26 @@
|
|||
# Generated by Django 4.1.2 on 2022-10-30 23:14
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
("character", "0019_weapon_category"),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name="weapon",
|
||||
name="category",
|
||||
field=models.CharField(
|
||||
choices=[
|
||||
("MEL", "corps à corps"),
|
||||
("RAN", "à distance"),
|
||||
("NON", "aucune"),
|
||||
],
|
||||
default="NON",
|
||||
max_length=3,
|
||||
),
|
||||
),
|
||||
]
|
|
@ -1 +1 @@
|
|||
0018_character_damage_reduction
|
||||
0020_alter_weapon_category
|
||||
|
|
|
@ -7,6 +7,7 @@ from django_extensions.db.models import TimeStampedModel
|
|||
|
||||
from character.models import Capability, Path
|
||||
from character.models.dice import Dice
|
||||
from character.models.equipment import Weapon
|
||||
from common.models import DocumentedModel, UniquelyNamedModel
|
||||
|
||||
|
||||
|
@ -218,7 +219,9 @@ class Character(models.Model):
|
|||
Profile.MagicalStrength.CHARISMA: self.modifier_charisma,
|
||||
Profile.MagicalStrength.NONE: 0,
|
||||
}
|
||||
return modifier_map.get(Profile.MagicalStrength(self.profile.magical_strength))
|
||||
return modifier_map.get(
|
||||
Profile.MagicalStrength(self.profile.magical_strength), 0
|
||||
)
|
||||
|
||||
@property
|
||||
def defense(self) -> int:
|
||||
|
@ -252,6 +255,14 @@ class Character(models.Model):
|
|||
def luck_points_max(self) -> int:
|
||||
return 3 + self.modifier_charisma
|
||||
|
||||
def get_modifier_for_weapon(self, weapon: Weapon) -> int:
|
||||
modifier_map = {
|
||||
Weapon.Category.RANGE: self.modifier_dexterity,
|
||||
Weapon.Category.MELEE: self.modifier_strength,
|
||||
Weapon.Category.NONE: 0,
|
||||
}
|
||||
return modifier_map.get(Weapon.Category(weapon.category), 0)
|
||||
|
||||
def get_capabilities_by_path(self) -> dict[Path, list[Capability]]:
|
||||
capabilities_by_path = collections.defaultdict(list)
|
||||
for capability in self.capabilities.all():
|
||||
|
|
|
@ -5,8 +5,16 @@ from common.models import UniquelyNamedModel
|
|||
|
||||
|
||||
class Weapon(UniquelyNamedModel, TimeStampedModel, models.Model):
|
||||
class Category(models.TextChoices):
|
||||
MELEE = "MEL", "corps à corps"
|
||||
RANGE = "RAN", "à distance"
|
||||
NONE = "NON", "aucune"
|
||||
|
||||
damage = models.CharField(max_length=50, blank=True, verbose_name="dégâts")
|
||||
special = models.TextField(blank=True, verbose_name="spécial")
|
||||
category = models.CharField(
|
||||
max_length=3, choices=Category.choices, default=Category.NONE
|
||||
)
|
||||
|
||||
class Meta:
|
||||
verbose_name = "Arme"
|
||||
|
|
|
@ -303,7 +303,10 @@
|
|||
{% for weapon in character.weapons.all %}
|
||||
<tr>
|
||||
<th scope="row">{{ weapon.name }}</th>
|
||||
<td>1D20 +</td>
|
||||
<td>
|
||||
1D20
|
||||
{{ character|weapon_modifier:weapon }}
|
||||
</td>
|
||||
<td>{{ weapon.damage }}</td>
|
||||
<td>{{ weapon.special }}</td>
|
||||
</tr>
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
from django import template
|
||||
|
||||
from character.models import Character, Weapon
|
||||
|
||||
register = template.Library()
|
||||
|
||||
|
||||
|
@ -14,3 +16,14 @@ def modifier(value):
|
|||
@register.filter
|
||||
def sub(value, arg):
|
||||
return value - arg
|
||||
|
||||
|
||||
@register.filter
|
||||
def weapon_modifier(character: Character, weapon: Weapon):
|
||||
value = character.get_modifier_for_weapon(weapon)
|
||||
if value > 0:
|
||||
return f"+ {value}"
|
||||
elif value < 0:
|
||||
return f"- {abs(value)}"
|
||||
else:
|
||||
return ""
|
||||
|
|
Loading…
Reference in a new issue