We need to consider a unified API for validation
Les mainteneurs répondent en général sous 1 jour
@marchc1 y travaille déjà.
Depuis le 15/10/2025.
Évaluation
Cette issue n'a pas encore été évaluée.
Description
Right now, a lot of things in the engine (Materials, Textures, Panels, etc) do not have a better way to determine if they're valid or not. While we won't get UAF's for having invalid pointers or anything, we will keep around resources that dont need to be kept, which also can lead to unintended behavior.
My previous engines have had something along the lines of this:
public interface IValidatable : IDisposable
{
bool Valid();
}
public static class IValidatableExts
{
public static bool IsValid<T>(this T? object) where T : IValidatable => object == null ? false : object.Valid();
}
This would allow us to have Panel for example implement it as such:
public class Panel() {
bool valid = true;
...
void Remove() {
...
Dispose();
...
}
void Dispose() {
valid = false;
}
bool Valid() => valid;
...
}
The nice thing about the extension-based API here is that T can be nullable, which allows us to run this even on a null object - meaning we don't have to do something like obj != null && obj.IsValid() - this is all valid:
Panel? panel = null;
Assert(!panel.IsValid())
panel = new Button(...);
Assert(panel.IsValid())
panel.Remove();
Assert(!panel.IsValid())
It just deviates from what Source does (ie. Source has PHandles, etc). I just think this is a little nicer given we're working with C#.
- Langage dominant
- C#
- Étoiles
- 104
- Forks
- 9
- Merge moyen
- 6 h 45 min
- PR mergées (30 j)
- 118
Préparer son environnement
Ce projet ne fournit ni conteneur de développement, ni Dockerfile, ni guide de contribution : l'installation est à votre charge. Commencez par son README, et consultez notre guide de la première contribution pour les étapes générales.
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de SourceDotNET/Source.NET
-
Difficulté 2/5 1-3 heures Accessibilité débutants 69/100
SourceDotNET/Source.NET#203 ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 3/5 1-2 jours Accessibilité débutants 30/100
SourceDotNET/Source.NET#214 · 1 réaction ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 4/5 3-5 jours Accessibilité débutants 52/100
SourceDotNET/Source.NET#210 ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 5/5 Plus d'une semaine Accessibilité débutants 25/100
SourceDotNET/Source.NET#117 · 2 commentaires ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 4/5 3-5 jours Accessibilité débutants 45/100
SourceDotNET/Source.NET#116 ·
Les mainteneurs répondent en général sous 1 jour
Toutes les issues de SourceDotNET/Source.NET
Issues similaires
-
Difficulté 2/5 1-3 heures Accessibilité débutants 64/100
joinrpg/joinrpg-net#5752 ·
Les mainteneurs répondent en général sous 1 jour
-
bug ux
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
CodeForFire/lagebuch#714 ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 82/100
dimitar-radenkov/Pointframe#294 ·
Les mainteneurs répondent en général sous 1 jour
-
kind/feature-request
Difficulté 2/5 1-3 heures Accessibilité débutants 68/100
Altinn/altinn-correspondence#2154 ·
Les mainteneurs répondent en général sous 1 jour
-
Batteries can't be swappedOuverte
Difficulté 2/5 1-3 heures Accessibilité débutants 61/100
Okabintaro/SubmersedVR#253 ·