Kolja Strohm преди 5 години
родител
ревизия
d83dafb861

+ 4 - 0
Asteroids/Asteroids.vcxproj

@@ -170,6 +170,8 @@
   </ItemDefinitionGroup>
   <ItemGroup>
     <ClInclude Include="Aufzeichnung\Aufzeichnung.h" />
+    <ClInclude Include="Editor\Abstract\Model.h" />
+    <ClInclude Include="Editor\Abstract\View.h" />
     <ClInclude Include="Editor\Editor.h" />
     <ClInclude Include="Editor\Interface\Dialogs\Dialog.h" />
     <ClInclude Include="Editor\Interface\Dialogs\Nachricht.h" />
@@ -205,6 +207,8 @@
   </ItemGroup>
   <ItemGroup>
     <ClCompile Include="Aufzeichnung\Aufzeichnung.cpp" />
+    <ClCompile Include="Editor\Abstract\Model.cpp" />
+    <ClCompile Include="Editor\Abstract\View.cpp" />
     <ClCompile Include="Editor\Editor.cpp" />
     <ClCompile Include="Editor\Interface\Dialogs\Dialog.cpp" />
     <ClCompile Include="Editor\Interface\Dialogs\Frage.cpp" />

+ 12 - 0
Asteroids/Asteroids.vcxproj.filters

@@ -114,6 +114,12 @@
     <ClInclude Include="Spiel\Asteroid\Pixel.h">
       <Filter>Headerdateien</Filter>
     </ClInclude>
+    <ClInclude Include="Editor\Abstract\Model.h">
+      <Filter>Headerdateien</Filter>
+    </ClInclude>
+    <ClInclude Include="Editor\Abstract\View.h">
+      <Filter>Headerdateien</Filter>
+    </ClInclude>
   </ItemGroup>
   <ItemGroup>
     <ClCompile Include="Initialisierung\Initialisierung.cpp">
@@ -212,5 +218,11 @@
     <ClCompile Include="Spiel\Asteroid\Pixel.cpp">
       <Filter>Quelldateien</Filter>
     </ClCompile>
+    <ClCompile Include="Editor\Abstract\View.cpp">
+      <Filter>Quelldateien</Filter>
+    </ClCompile>
+    <ClCompile Include="Editor\Abstract\Model.cpp">
+      <Filter>Quelldateien</Filter>
+    </ClCompile>
   </ItemGroup>
 </Project>

+ 24 - 0
Asteroids/Editor/Abstract/Model.cpp

@@ -0,0 +1,24 @@
+#include "Model.h"
+
+using namespace Framework;
+
+Model::Model()
+{
+    views = new RCArray< View >();
+}
+
+Model::~Model()
+{
+    views->release();
+}
+
+void Model::addView( View *view )
+{
+    views->add( view );
+}
+
+void Model::update()
+{
+    for( auto v = views->getIterator(); v; v++ )
+        v->update( this );
+}

+ 17 - 0
Asteroids/Editor/Abstract/Model.h

@@ -0,0 +1,17 @@
+#pragma once
+#include "View.h"
+#include <Array.h>
+
+class View;
+
+class Model
+{
+private:
+    Framework::RCArray< View > *views;
+
+public:
+    Model();
+    ~Model();
+    void addView( View *view );
+    void update();
+};

+ 12 - 0
Asteroids/Editor/Abstract/View.cpp

@@ -0,0 +1,12 @@
+#include "View.h"
+
+View::View()
+{
+    ref = 1;
+}
+
+View *View::getThis()
+{
+    ref++;
+    return this;
+}

+ 15 - 0
Asteroids/Editor/Abstract/View.h

@@ -0,0 +1,15 @@
+#pragma once
+
+class Model;
+
+class View
+{
+protected:
+    int ref;
+
+public:
+    View();
+    virtual void update( Model *m ) = 0;
+    virtual View *getThis();
+    virtual View *release() = 0;
+};

+ 4 - 3
Asteroids/Editor/Karte/EditorKarte.h

@@ -1,13 +1,14 @@
 #pragma once
 
 #include "../Netzwerk/EditorKlient.h"
+#include "../Abstract/Model.h"
 #include <Punkt.h>
 #include <Critical.h>
 #include <functional>
 
 namespace Editor
 {
-    struct SpielerDaten
+    struct SpielerDaten : public Model
     {
         int id;
         Punkt pos;
@@ -30,7 +31,7 @@ namespace Editor
         int bild;
     };
 
-    struct TeamDaten
+    struct TeamDaten : public Model
     {
         int id;
         int maxPunkte;
@@ -49,7 +50,7 @@ namespace Editor
         int punkte;
     };
 
-    struct ObjektDaten
+    struct ObjektDaten : public Model
     {
         Punkt pos;
         int id;

+ 20 - 0
Asteroids/Spiel/SpielKlasse.cpp

@@ -798,6 +798,12 @@ void SpielKlasse::stknVerarbeitung()
                 bytes += 4;
                 län -= 4;
                 int sNum = *(int*)bytes;
+                bytes += 4;
+                län -= 4;
+                float erf = *(float*)bytes;
+                bytes += 4;
+                län -= 4;
+                int skillP = *(int*)bytes;
                 län -= 4;
                 goBackInTime( zeit );
                 int sAnz = schüsse->getEintragAnzahl();
@@ -827,6 +833,10 @@ void SpielKlasse::stknVerarbeitung()
                                 if( s->getSpielerNummer() == tmp->getSpieler() )
                                 {
                                     s->machSchaden( intens );
+                                    if( s->getEp() != erf )
+                                        chat->addNachricht( Text( "asynchrony detected ep difference: " ) += ( erf - s->getEp() ), 0xFFFF0000 );
+                                    if( s->getSkillP() != skillP )
+                                        chat->addNachricht( Text( "asynchrony detected skillPunkte difference: " ) += ( skillP - s->getSkillP() ), 0xFFFF0000 );
                                     bestenliste->updateSpieler( s );
                                     break;
                                 }
@@ -979,6 +989,12 @@ void SpielKlasse::stknVerarbeitung()
             bytes += 8;
             län -= 8;
             int newAsteroid = *(int*)bytes;
+            bytes += 4;
+            län -= 4;
+            float erf = *(float*)bytes;
+            bytes += 4;
+            län -= 4;
+            int skillP = *(float*)bytes;
             län -= 4;
             goBackInTime( zeit );
             int aAnz = asteroids->getEintragAnzahl();
@@ -998,6 +1014,10 @@ void SpielKlasse::stknVerarbeitung()
                                 if( s->getSpielerNummer() == tmp->getSpieler() )
                                 {
                                     s->addTreffer( (float)tmp->getIntensität( a->getSpeed() ) );
+                                    if( s->getEp() != erf )
+                                        chat->addNachricht( Text( "asynchrony detected ep difference: " ) += ( erf - s->getEp() ), 0xFFFF0000 );
+                                    if( s->getSkillP() != skillP )
+                                        chat->addNachricht( Text( "asynchrony detected skillPunkte difference: " ) += ( skillP - s->getSkillP() ), 0xFFFF0000 );
                                     break;
                                 }
                             }

+ 5 - 0
Asteroids/Spiel/Spieler/Spieler.cpp

@@ -782,4 +782,9 @@ double Spieler::getTeamEnergieSchildBonus() const
 double Spieler::getTeamEnergieSchildEffizienzBonus() const
 {
     return energieSchildEffizienz / 100 * netzwerk;
+}
+
+int Spieler::getSkillP() const
+{
+    return skillPunkte;
 }

+ 1 - 0
Asteroids/Spiel/Spieler/Spieler.h

@@ -184,6 +184,7 @@ public:
     double getTeamAntriebEffizienzBonus() const;
     double getTeamEnergieSchildBonus() const;
     double getTeamEnergieSchildEffizienzBonus() const;
+    int getSkillP() const;
 };
 
 #endif