-
Notifications
You must be signed in to change notification settings - Fork 31
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Überarbeitung von Entities, Komponenten und Extensions #245
Überarbeitung von Entities, Komponenten und Extensions #245
Conversation
component system wächst
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Also erstmal danke für deine Mitarbeit.
Dann ein paar dinge.
- Bitte wähle einen aussagekräftigeren Titel
- Werde bitte in deinem Kommentar deutlicher was du gemacht hast und welche konsequenzen das hat
- Erläutere bitte die Todo's die du im Code hinzugefügt hast. Es wäre auch schön zusammenfassend in deiner Beschreibung zu lesen was noch getan werden muss
- Bitte beachte unsere Coding Richtlinien CodeStyles
Da das eine größere Änderung ist, kann man die nicht einfach so mergen. Es wäre schön wenn du ein Video oder Blogeintrag oder ähnliches verlinkst, gemäß unserer Code of Conducts
Andernfalls wird es wohl noch sehr lange dauern bis wir das im Stream ausführlich bearbeiten können.
@@ -11,10 +11,8 @@ public class ComplexPlanetGenerator : IMapGenerator | |||
public IPlanet GeneratePlanet(Guid universe, int id, int seed) | |||
{ | |||
Index3 size = new Index3(12, 12, 3); | |||
ComplexPlanet planet = new ComplexPlanet(id, universe, size, this, seed) | |||
{ | |||
Generator = this |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Es steht zwar nicht explizit in den Richtlinien aber ich würde die Schreibweise mit dem Initialisier bevorzugen.
}; | ||
for (int i = 0; i < COLUMNS; i++) | ||
grid.Columns.Add(new ColumnDefinition() { ResizeMode = ResizeMode.Parts, Width = 1 }); | ||
// TODO: wieder einfügen |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Bitte verwende aussagekräftigere Todo's wenn du sie im Code machst. Was möchtest du hier wieder einfügen
public override string ToString() | ||
{ | ||
// TODO: resx | ||
return "Inventar"; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Auch hier bitte ein Aussagekräftigeres Todo verwenden.
|
||
private ToolBarComponent toolbar; | ||
|
||
public Label activeToolLabel; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Es steht auch nicht explizit in den Richtlinien wird aber so gehandhabt. Bitte Namen von Öffentlichen Variablen und Prop's groß schreiben
{ | ||
if (!Visible || !Enabled) | ||
return; | ||
if(!(toolbar.Entity is IControllable con) || con.Controller == null) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Laut unseren Codingrichtlinen sind out Variablen nur innerhalb des if's scopes zu verwenden
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Das ist im selben Scope. Da C# bei If und || operatoren abbricht bzw. nicht mehr weiter prüft sobald die Bedingung erfühlt ist.
Zweitens das ist kein out... das ist immer noch ein is. Selbst wenn C#7 das aufgemotzt hat.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Ja ok das ist kein out habe ich übersehen. Aber nein das ist nicht der selbe Scope ^^ du returnst direkt unter dem if und verwendest somit das con außerhalb des if's s.h. zeile 101 oder 122. Das ist etwas was auch ich mir abgewöhnen muss wenn ich in octo programmiere.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Ok OK
/// </summary> | ||
public interface IEntityController | ||
{ | ||
// TODO: more buttons ... ? |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Bitte ausführlicher werden
@@ -25,6 +25,6 @@ public interface IExtension | |||
/// Register the Components in the ExtensionsLoader | |||
/// </summary> | |||
/// <param name="extensionLoader">ExtensionsLoader</param> | |||
void Register(IExtensionLoader extensionLoader); | |||
void Register(IExtensionLoader extensionLoadere); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Rechtschreibfehler?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Und das von dir :(
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Hatte die Signatur erweitert und es mir dann doch anders überlegt. Aber ja Rechtschreibfehler!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Ok war mir unsicher, hätte auch absichtlich sein können. Ok, dann einfach das e wegnehmen ^^.
@@ -10,6 +10,7 @@ public interface IMapPopulator | |||
/// </summary> | |||
int Order { get; } | |||
|
|||
//TODO: Kommentieren xD |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Bitte machen und nicht auffordern
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Schau mal wer (und zwar nicht ich) die XML Comments für den Populator gemacht hat... ich hab wenigstens den Anstand es oben oben drüber zu schreiben.
/// <param name="column00">TODO: Kommentieren</param>
/// <param name="column01">TODO: Kommentieren</param>
/// <param name="column10">TODO: Kommentieren</param>
/// <param name="column11">TODO: Kommentieren</param>
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Wir hatten "vor deiner zeit" auch eine seeeeeeehr geladene und heftige Diskussion zu dem Thema Todos direkt im code. An sich sind sie wenn die nachwelt was damit anfangen kann ok. Grundsätzlich stehe ich aber auf dem Standpunkt das man die Todo's so stark wie möglich reduzieren sollte bis spätestens zu einem pull request. Des weiteren meine Ich wenn du den Code an der stelle eh schon geschrieben hast, warum hast du nicht auch gleich kommentiert?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Der ist ja nicht von mir "(und zwar nicht ich) " weiß ja nicht mal was ich da sinnvolles kommentieren soll :P
aus column 00 ...
@@ -155,26 +160,26 @@ public void ExitGame() | |||
/// <param name="entity">Neue Entity</param> | |||
public void AddEntity(Entity entity) | |||
{ | |||
if (entity == null) | |||
throw new ArgumentNullException(nameof(entity)); | |||
if (entity == null) throw new ArgumentNullException(nameof(entity)); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
CodeStyle!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Der Coding Style tut mir in den Augen weh.
Aber bitte. Ich versuch mich dran zu halten.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Wir haben ihn in der Gemeinschaft mit Abstimmung entschieden. Auch ich, auch lassi, Jvbsl und wer nicht alles müssen sich daran halten selbst wenn jeder von uns eigene coding style vorlieben hatt
|
||
if (entity == null) | ||
throw new ArgumentNullException(nameof(entity)); | ||
if (entity == null) throw new ArgumentNullException(nameof(entity)); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
CodeStyle
Puuh sowas zum Frühen morgen. Ich sag erstmal vielen Dank. Aber ich hab leider ein paar Punkte anzumerken. Mein Problem ist, es gibt viele Dinge die mir gefallen z.B. Und dann gibt es leider auch die, wo ich sage so lieber nicht z.B: Aber ich würd mir das heute Abend noch mal ein bissel besser Anschauen. viele grüße |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Hab es mal zusätzlich auf die schnelle Technisch auf meinem Toaster geprüft. Mir scheint das beim Merge ein wenig schief gelaufen ist. OctoAwesome ist in dem Eingereichten Stand weder Kompilier- noch ausführbar.
@@ -1,6 +1,5 @@ | |||
<?xml version="1.0" encoding="utf-8"?> | |||
<packages> | |||
<package id="engenious" version="0.1.17" targetFramework="net461" /> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
engenious wird in der Network.dll benötigt
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Es ist doch der Sinn von einem Merge zu prüfen was geändert werden soll und was bleiben kann oder nicht ?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Develop wäre deshalb als stand etwas geschickter gewesen, im stream läuft nicht immer alles perfekt :D
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Develop lief bei mir nicht :D
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Was lief den im Develop nicht?
Nein ein Merge hat den zweck zwei Dinge zu einem zu vereinen. Der jenige der den merge ausführt muss, zumindestens wenn es quellcode betrifft, überprüfen oder wissen welches von welcher seite das gültige bzw. richtige ist.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Andere Wortwahl, naja egal jetzt.
In der SceneControl, Zeile 80.
simpleShader = manager.Game.Content.Load<Effect>("simple");
Die Exceptions sind auch sehr aufschlussreich:
Message: ""
Stacktrace:
bei engenious.Graphics.Shader.Compile()
bei engenious.Content.Serialization.EffectTypeReader.Read(ContentManager manager, ContentReader reader)
bei engenious.Content.Serialization.ContentTypeReader`1.engenious.Content.Serialization.IContentTypeReader.Read(ContentManager manager, ContentReader reader)
bei engenious.Content.ContentManager.ReadAsset[T](String assetName)
bei engenious.Content.ContentManager.Load[T](String assetName)
bei OctoAwesome.Client.Controls.SceneControl..ctor(ScreenComponent manager, String style) in C:\Users\Klaus A\Source\Repos\octoawesome\OctoAwesome\OctoAwesome.Client\Controls\SceneControl.cs:Zeile 80.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Wenn du genaueres wissen willst führ das ContentTool manuell aus und schau die Fehlermeldung dort an, wenn es dort keine gibt, läuft irgendetwas mächtig schief.
Welche OpenGL Version hast du denn? OpenGL 1.1 ist zu alt
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
extensionLoader.LoadExtensions(); | ||
|
||
DefinitionManager = new DefinitionManager(extensionLoader); | ||
ResourceManager = new ResourceManager(extensionLoader, DefinitionManager, Settings); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Der ctor aufruf ist nicht korrekt. Der ResourceManager möchte vier Parameter haben.
|
||
extensionLoader = new ExtensionLoader(settings); | ||
|
||
ExtensionLoader extensionLoader = new ExtensionLoader(settings); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
ExtensionLoader gibt es nicht mehr als Prop
@@ -84,8 +76,23 @@ public OctoGame() : base() | |||
|
|||
Assets = new AssetComponent(this); | |||
Components.Add(Assets); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Hier kommt es zur NullReferenceException
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Das ist ein Property aus dem Basis Klasse. Was habt ihr da bitte geändert?
Oder was hab ich falsch gemacht ?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Die Property wird local in diesem Stand ausgeblendet also nein das ist nicht die Prop aus der Basisklasse ;)
@@ -106,10 +106,10 @@ internal sealed class SceneControl : Control | |||
} | |||
} | |||
|
|||
// TODO: valid planet id should be > 0 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Warum sollte 0 keine valide ID sein? Zählen ab 0 ist doch normal. Wir brauchen sowieso immer minimal einen Planeten und der ist halt Nummer 0.
Es kompiliert nicht bei mir, Siehe Video später |
} | ||
|
||
private void Initalize() | ||
{ |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Warum Initalize entfernen ???
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Hast recht der muss wieder rein!
|
||
public WauziTestController() | ||
{ | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Zu heavy, sollte mehr aufgesplittet sein. Zum Beispiel Slected Sides
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Verstehe zwar nicht was du mir sagen willst, aber wenn es das ist was ich denke das es ist.
Nenene, das Interace bietet eine generalisiert Möglichkeit eine Entität mit dem Spieler als auch einer KI zu steuern. Hallte es nicht für Sinnvoll für jeden möglichen UserInput eine eigene Klassen oder Interface zu schreiben.
Ich sage, es ist nicht Heavy genug...
public float Radius => 1; | ||
private IEntityController currentcontroller; | ||
private float jumptime; | ||
public WauziEntity() : base(true) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Eigenschaften nicht änderbar
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Das ist die konkrete Implementierung einer einer Entity für Testzwecke die außerdem in Entwicklung ist.
Components.AddComponent(new BoxCollisionComponent()); | ||
Components.AddComponent(new ControllableComponent()); | ||
Components.AddComponent(new RenderComponent() { Name = "Wauzi", ModelName = "dog", TextureName = "texdog", BaseZRotation = -90 }, true); | ||
this.currentcontroller = controller; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Bitte Componenten lassen
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
NEIN !
|
||
var blockplane = CollisionPlane.GetBlockCollisionPlanes(pos, movecomp.Velocity); | ||
|
||
var planes = from pp in playerplanes |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Das kommt noch von mir und hat Bestandschutz, ist nur kopiert
int flatindex = GetFlatIndex(x, y, z); | ||
ushort block = Blocks[flatindex]; | ||
if (removeblock) SetBlock(flatindex, 0); | ||
return block; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Warum remove
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Immer noch der Rattenschwanz von oben ^^
return new Vector3(vector.X, vector.Y); | ||
} | ||
} | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Gut gefällt
/// </summary> | ||
Vector3 Body { get; } | ||
} | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
IEntity Definition ist zu speziell
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Die ist noch nicht fertig ...
/// <param name="removeblock">Entfernt den Block.</param> | ||
/// <returns>Die Block-ID an der angegebenen Koordinate</returns> | ||
ushort GetBlock(int x, int y, int z, bool removeblock); | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Warum remove
<Compile Include="EntityComponents\PositionComponent.cs" /> | ||
<Compile Include="EntityComponents\ToolBarComponent.cs" /> | ||
<Compile Include="EntityFilterAttribute.cs" /> | ||
<Compile Include="Extension.cs" /> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Sind immer noch im Projekt, aber nicht verlinkt
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Also bei mir sind sie weg :)
Hier noch das entsprechende Review-Video:https://www.youtube.com/watch?v=bRm7qTHiKqA |
Also nach dem sehr guten Feedback überarbeite ich das jetzt nochmal und Merge es vorher lokal in die Develope. |
In diesem Pull Request sind einige Fragen zu den Conding Styles aufgetaucht. Ich habe gerade diese Fälle, jeweils wie @Gallimathias geschrieben hatte, in das Wiki eingepflegt. |
Ein bisschen was überarbeitet.
Neue Interfaces für Extensions und grundlegende Mechanismen.
Simulation hoffentlich nicht verschlechtert. Wobei sie jetzt anders ist aber kann ich notfalls wieder ändern.
UI dynamischer gestaltet.
Entity angepasst.