Forum www.warsztatgames.fora.pl Strona Główna www.warsztatgames.fora.pl
WarsztatGames
 
 FAQFAQ   SzukajSzukaj   UżytkownicyUżytkownicy   GrupyGrupy   GalerieGalerie   RejestracjaRejestracja 
 ProfilProfil   Zaloguj się, by sprawdzić wiadomościZaloguj się, by sprawdzić wiadomości   ZalogujZaloguj 

Budowa projektu: bazowe rozważania
Idź do strony 1, 2, 3, 4  Następny
 
Napisz nowy temat   Odpowiedz do tematu    Forum www.warsztatgames.fora.pl Strona Główna -> Dyskusja Ogólna
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
Will
Administrator



Dołączył: 20 Sty 2012
Posty: 83
Przeczytał: 0 tematów

Ostrzeżeń: 0/5

PostWysłany: Śro 0:19, 15 Lut 2012    Temat postu: Budowa projektu: bazowe rozważania

-Core
Ogólnie mój pomysł na budowę całości. Proponuje zastosować system komponentowy dla całej budowy gry tzn. każdy obiekt gry byłby instancja klasy podobnej do tej:
Kod:
   
   class GameObject
   {

   
   public:

               /*

      */
      GameObject():m_pRenderObject(NULL),m_pCamera(NULL),
         m_uComponentsBits(0)
      {
         m_pTransform=new Transform();
         m_pTransform->m_pObject=this;
         
         m_uComponentsBits|=COMPONENT_TRANSFORM;

      }

      /*

      */
      ~GameObject()
      {

         releaseAll();
      }

      /*

      */
      void releaseAll()
      {
         SAFE_DELETE(m_pTransform)
         SAFE_DELETE(m_pRenderObject)
         SAFE_DELETE(m_pCamera)
      }

      /*

      */
      RenderObject* getRenderObjectComponent() const{return m_pRenderObject;}


      /*

      */
      const AABB& getAABB() const {return m_AABB;}


      /*

      */
      bool hasComponent(uint16 component){return (m_uComponentsBits&component)!=0;}

      /*
      
      */
      RESULT addRenderObjectComponent(uint32 spriteID);

      /*

      */
      RESULT addRenderObjectComponent(const std::string& meshName);


      /*

      */
      RESULT addCameraComponent(const CameraInfo& camera);

      /*

      */
      Camera* getCameraComponent() const {return m_pCamera;}


      /*

      */
      Transform* getTransformComponent() const {return m_pTransform;}
      


   private:

      /*
      Compute aabb using max&&min points from a currently set mesh
      */

      void computeAABB();

      /*
      move aabb
      */
      void translateAABB(const Vec2& move);
      


   

      friend class SceneMgr;
      friend class Transform;



   private:

      AABB m_AABB;
      Transform * m_pTransform;
      RenderObject * m_pRenderObject;
      Camera* m_pCamera;
      uint16 m_uComponentsBits;
      
   };



Wpakowałem tam podstawowe komponenty czyli Transformacja, render object i kamera. Finalnie taki obiekt miałby ich znacznie więcej np.:
Kod:

PhysicsCollider* m_pCollider;
RigidBody* m_pBody;
NetworkSynchronization* m_pNetwork;
GUIElement* m_pGUI;
AIController* m_pAI;
Script* m_pScripts[x];
Itd..

Bazowo każdy z komponentów byłby ustawiany na NULL. Dzięki temu update samej gry byłby podzielony na niezależne(tak bardzo jak tylko jest to możliwe) party co pozwala na łatwiejszą współprace i „dobudowywanie” nowych fragmentów. Dodatkowo pozwala to na oddzielne updaty bo rendering i fizyka leciałyby na swoich komponentach np.:
Faza pierwsza każdej ramki znajduje w mgr sceny obiekty gry, które mieszczą się ekranie + jakiś tam dodatkowy offset. Z tego powstaje lista obiektów, które lecą do update’u. W przypadku renderingu z listy można wyciągnąć z każdego obiektu RenderCommand czyli:
Kod:

struct RenderCommand
{
Transform* t;
Sprite* sprite;
MaterialID mat;
}

Wtedy osoba zajmująca się renderingiem dostaje liste RenderCommand’ów i reszta ją kompletnie nie interesuje. Ma wszystko co jest potrzebne do wyrenderowania ramki bez żadnej zewnętrznej wiedzy(piszę o najprostszym przypadku dlatego pomijam obiekty typu light itp.).

To samo dotyczy innych podsystemów takich jak AI, GUI czy fizyka. Co ramkę przygotowywane są dane potrzebne do przeprowadzenia update’u w przypadku np.: ai aktualny stan świata.
Jeśli chodzi o synchronizacje sieci bazowy komponent NetworkSynchronization miałby klasy potomne napisane przez grupę zajmującą się siecią takie jak NetworkRigidbody, NetworkAIState, NetworkPlayer czy NetworkBullet itp. Każda taka klasa miałaby przeładowaną odpowiednią funkcje typu: synchronize(), która w zależności czy jesteśmy serwerem czy klientem wykonywałaby określone zadania. Dzięki temu mimo, że sam gameplay nie będzie zrobiony jeszcze przez dość długi czas osoby piszący ai czy sieć mogą spokojnie pracować nad swoją częścią.
Edytor
Już jest chętna osoba aby się tym zająć i wybór padł na c#. Czyli w zależności od dokonanego wyboru trzeba będzie napisać wrapper w C++/CLI(pisałem), użyć socketów i napisać odpowiedni Messager handler(pisałem) lub pinvoke(nie pisałem) i wtedy od strony silnika trzeba będzie zrobić globalną klasę dostępną dla edytora do zarządzania wszystkimi wymaganymi funkcjami. Sam edytor miałby być przystosowany do tworzenia map ogólnie dla gier naszego typu czyli proste układanie grafik+usuwanie/dodawanie materiałów ,komponentów itd. A także modyfikacje parametrów udostępnionych przez party obiektu gry. Dodatkowo musi być możliwość dodawania skryptów do danych encji w grze. Przydałaby się także możliwość testowania gry realtime w samym edytorze. W praktyce wystarczy tutaj posiadać kopie mgr sceny aktualnie ustawianego levela.
AI
Budowa wydaje się dość prosta, komponent AIController powinien posiadać funkcje updateujące stan danego bota, szukanie ścieżki z dostępnej mapy a także model zarządzania wiadomościami. Osoba pisząca w takim rozwiązaniu co ramkę lub co jakąś delte predefiniowaną dostaje wszystkie encje botów na danym obszarze + All ich dane.
Skrypty
Stanęło na lua więc tutaj całość jest równie prosta. Skrypty mogą „zgłosić” jedną z kilku funkcji jak OnStart, OnUpdate, OnDestroy i mają dostęp do danych obiektu gry.(komponentów i ich funkcji).

Rendering
Jak już pisałem wcześniej w tym rozwiązaniu osoba pisząca rendering dostaje od systemu gry listę widocznych obiektów wraz z danymi potrzebnymi do renderingu. Piszącego nie obchodzi skąd dane się wzięły, ważne jest to, że są to All obiekty obecnie będące w zasięgu gracza. To jak już całość zostanie wyrenderowana zależy tylko od programisty.
Bazowe systemy
Zarządzanie pamięcią: Proponuje zastosować standardowe operatory lub jeśli pamięć alokacja będzie problemem napisać pool i Frame allocator.
Mgr zasobów, proponuje najprostsze rozwiązanie:
Kod:

   class IResource
   {
   public:
      IResource():m_bLoaded(false),m_resType(RT_UNKNOWN),m_bNeedReset(false)
      {
         
      }

      /*

      */
      ~IResource(){}

      /*

      */
      virtual bool load(const string& cpath)=0;
      /*

      */
      virtual void unload()=0;
      /*

      */
      ResourceType getType() const {return m_resType;}
      /*

      */
      bool isLoaded() const {return m_bLoaded;}

      /*

      */
      const string& getName()const {return m_sName;}

      /*

      */
      bool needReset() const {return m_bNeedReset;}


      /*

      */
      uint32 getID() const{return m_uID;}

   protected:
      friend class ResourcesMgr;

      void setName(const std::string& name){m_sName=name;}
      

      string m_sResPath;
      string m_sName;
      ResourceType m_resType;
      uint32 m_uID;
      bool m_bLoaded;
      bool m_bNeedReset;



   };


Wtedy mamy takie samo rozwiązanie dla wszystkich zasobów przy pomocy szablonów:
Kod:

template<typename t>
      int32 addResource(t* res,const char* cPath,const char* cName);
template<typename t>
      t* getResource(const string& name)
      {
         int32 id=m_ParamNameID[name];
         Assert(id>=0,"Error: Incorrect resource name!");
         return (t*)m_vResources[id];
      }



Obsługa błędów bez żadnych wyjątków I innych cudów, assercje +kody błędów+ logi.
Taki jest mój bazowy pomysł na strukturę całej gry.


Post został pochwalony 0 razy
Powrót do góry
Zobacz profil autora
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
PsichiX




Dołączył: 23 Sty 2012
Posty: 6
Przeczytał: 0 tematów

Ostrzeżeń: 0/5

PostWysłany: Śro 16:37, 15 Lut 2012    Temat postu:

a co z RTTI? siedziałem juz nad jednym dużym projektem i RTTI dało nam dużo ułatwień przy dziedziczeniu i sprawdzaniu z jakim obiektem mamy do czynienia

Post został pochwalony 0 razy
Powrót do góry
Zobacz profil autora
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
SnowyMan




Dołączył: 21 Sty 2012
Posty: 27
Przeczytał: 0 tematów

Ostrzeżeń: 0/5

PostWysłany: Śro 16:47, 15 Lut 2012    Temat postu:

-Renderer

@Will Małe poprawki, co powiecie na coś takiego?
Kod:
class IRenderable;
class Texture : IResource;
class Font : IResource;

struct RenderCommand
{
   Transform* t;
   IRenderable* sprite; // renderable object
   MaterialID mat;
   Effect* effect; // shader
}

struct Transform
{
   float moveX, moveY, moveZ;
   float scaleX, scaleY;
   float rotation;
};

class Sprite : IRenderable
{
   void SetTexture(Texture* tex);
   Texture* GetTexture();
};

class Text : IRenderable
{
   void SetFont(Font* font);
   Font* GetFont();

   void SetText(const char* text);
   const char* GetText();
};

void Renderer
{
   void Draw(RenderCommand rendCom);
};


To oczywiście tylko taki mini szkielecik ^^ Odnośnie materiałów nigdy nie miałem z nimi do czynienia więc ktoś by mi musiał pomóc się szybko ogarnąć. Do każdego sprajta chcecie mieć jak rozumiem możliwość podpięcia shadera?

Jeśli takie coś wam odpowiada jutro zabiorę się za kodowanie Smile Trzeba jeszcze zrobić jakieś SVN albo Git'a żeby toto razem testować. Kompilator rozumiem gcc? Dokumentacja poszczególnych części Doxygen(po angielsku czy po polsku?)?


Post został pochwalony 0 razy
Powrót do góry
Zobacz profil autora
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
Will
Administrator



Dołączył: 20 Sty 2012
Posty: 83
Przeczytał: 0 tematów

Ostrzeżeń: 0/5

PostWysłany: Śro 17:11, 15 Lut 2012    Temat postu:

@SnowyMan Cały kram z przygotowywaniem draw listy polega na tym, że nie ma żadnego interfejsu IRenderable. Ty dostajesz suche dane. Czyli face+transformacje+materiał z jakim mają zostać wyrenderowane. Czcionki, które należą do gui będą renderowane osobno np z innego viewa. Nie ma potrzeby pakować żadnego Effect itd. Dostajesz materiał id a efekt/shader pobierasz sobie z bezpośrednio z mgr. Możesz sobie wszystko posortować według materiału czy robić inne cuda.

Klasa viewa może wyglądać tak:

Kod:


struct RenderView
{
   Camera                cam;
  ViewArea                area;
   RT     renderTarget;
   
   List<RenderCommand *> RenderCommands;

 
   enum ViewType
   {
     
     MainCam,
     PostProcessing,

   };

   viewType     ViewType;
}


Wtedy całość tego co jest na ekranie będzie odseparowana od "grafiki świata". tzn dostaniesz to jako osobną listę. W render comandzie dostaniesz też info o światłach tylko nie chciało mi się już tego rozciągać, chodziło o pokazanie samego rozumowania.

Cytat:

Trzeba jeszcze zrobić jakieś SVN albo Git'a żeby toto razem testować. Kompilator rozumiem gcc? Dokumentacja poszczególnych części Doxygen(po angielsku czy po polsku?)?

Na razie spokojnie rozdzielimy rolę i dopracujemy model, który zaproponowałem a pisać sobie już możesz sam. Najlepiej dokumentacje pisz po ang.


Cytat:
a co z RTTI? siedziałem juz nad jednym dużym projektem i RTTI dało nam dużo ułatwień przy dziedziczeniu i sprawdzaniu z jakim obiektem mamy do czynienia

Ale jakie to miałoby zastosowanie w takim modelu? Tzn what the point.


Post został pochwalony 0 razy
Powrót do góry
Zobacz profil autora
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
PsichiX




Dołączył: 23 Sty 2012
Posty: 6
Przeczytał: 0 tematów

Ostrzeżeń: 0/5

PostWysłany: Śro 17:55, 15 Lut 2012    Temat postu:

taki, że jak robisz obiekty dziedziczące po GameObject, to czasem będziesz chciał sprawdzać, czy dany GameObject jest typem np. przeciwnika, przeszkody itp. chyba, że chcecie robić bez dziedziczenia, a każdy gameobject miałby w sobie jakoś zapisane te informacje

Post został pochwalony 0 razy
Powrót do góry
Zobacz profil autora
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
SnowyMan




Dołączył: 21 Sty 2012
Posty: 27
Przeczytał: 0 tematów

Ostrzeżeń: 0/5

PostWysłany: Śro 18:12, 15 Lut 2012    Temat postu:

@Will Czyli w gruncie rzeczy to co dostaję w RenderCommand to przekształcenia do wykonania, id materiału (na podstawie którego będę mógł sobie wybrać shader z RM) oraz sprite'a... czyli VBO i id tekstury w RM? Nie jestem pewien czy dobrze cię zrozumiałem więc znów mnie popraw jeśli musisz ^^

Post został pochwalony 0 razy
Powrót do góry
Zobacz profil autora
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
PsichiX




Dołączył: 23 Sty 2012
Posty: 6
Przeczytał: 0 tematów

Ostrzeżeń: 0/5

PostWysłany: Śro 18:47, 15 Lut 2012    Temat postu:

jest sobie VBO, który trzyma sobie bacza meshy, render command zawiera liczby oznaczające przedział vbo (lub ibo, które sortujemy do zoptymalizaowania renderingu setu meshy o tym samym materiale), który trzeba wyrenderować.
refki:
[link widoczny dla zalogowanych]
[link widoczny dla zalogowanych]
[link widoczny dla zalogowanych]
[link widoczny dla zalogowanych]


Post został pochwalony 0 razy
Powrót do góry
Zobacz profil autora
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
Will
Administrator



Dołączył: 20 Sty 2012
Posty: 83
Przeczytał: 0 tematów

Ostrzeżeń: 0/5

PostWysłany: Śro 21:02, 15 Lut 2012    Temat postu:

Cytat:
taki, że jak robisz obiekty dziedziczące po GameObject, to czasem będziesz chciał sprawdzać, czy dany GameObject jest typem np. przeciwnika, przeszkody itp. chyba, że chcecie robić bez dziedziczenia, a każdy gameobject miałby w sobie jakoś zapisane te informacje

Nie ma żadnych obiektów dziedziczących po GameObject. Jeśli obiekt jest światłem to ma w sobie komponent światła, jeśli jest przeciwnikiem to ma w sobie komponent AI. Osoba zajmująca się ai dostaje osobną liste obiektów, które są przeciwnikami(aktywnymi/widocznymi itp zależnie od flag).

Cytat:
@Will Czyli w gruncie rzeczy to co dostaję w RenderCommand to przekształcenia do wykonania, id materiału (na podstawie którego będę mógł sobie wybrać shader z RM) oraz sprite'a... czyli VBO i id tekstury w RM? Nie jestem pewien czy dobrze cię zrozumiałem więc znów mnie popraw jeśli musisz ^^

Dostajesz transformacje, vbo i id materiału. Materiał sam w sobie przetrzymuje tekstury. np:

Kod:

struct MaterialDesc
{
   uint32 effectID;
   DynamicArray<MaterialParameter> vParams;
};


struct MaterialParameter
{
   ShaderParam param;
   uint32 paramID;
};

struct ShaderParam
{

public:

   ParamType type;


   union
   {
      float4  m_asFloat4;
      float3  m_asFloat3;
      float2 m_asFloat2;
      float m_asFloat;
      uint32 m_asID;
      bool m_asBool;
   };
   

};


enum ParamType
{
   PTYPE_UNKNOWN,
   PTYPE_VOID,
   PTYPE_BOOL,
   PTYPE_INT,
   PTYPE_FLOAT,
   PTYPE_STRING,
   PTYPE_TEXTURE,
   PTYPE_TEXTURE1D,
   PTYPE_TEXTURE2D,
   PTYPE_TEXTURE3D,
   PTYPE_TEXTURECUBE,
   PTYPE_COLOR,
   PTYPE_FLOAT2,
   PTYPE_FLOAT3,
   PTYPE_FLOAT4,
   


};




i potem np dla vertex i pixel shadera masz metody typu:

Kod:

setParameter(MaterialParameter param);

i tam już wewnętrznie vertex czy pixel shader ustawiają dany parametr. Jeśli ShaderParam ma typ tekstury to id z unii jest indeksem dla tekstury z menagera zasobów.

Dzięki takiemu rozwiązaniu możesz renderować choćby tak:
Kod:

foreach(RenderCommand com in renderCommandList)
{
   setMaterial(com.matID,com.transform);
  draw(com);
}

gdzie setMaterial to np:

setMaterial(uint32 id,Transform t)
{
  currentMat=Mgr.getResource<Material>(id);
  currentEff=Mgr.getResource<Effect>(currentMat.effectID);

  currentEff.setMaterialParameters(currentMat.paramters);
  currentEff.setTransform(t);
}



Oczywiście to psuedo kod i pokazuje przykład jak coś takiego może wyglądać.


Post został pochwalony 0 razy
Powrót do góry
Zobacz profil autora
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
SnowyMan




Dołączył: 21 Sty 2012
Posty: 27
Przeczytał: 0 tematów

Ostrzeżeń: 0/5

PostWysłany: Śro 21:31, 15 Lut 2012    Temat postu:

Ok, dzienks, załapałem koncepcję. Jak już ogarniemy cały plan to będę wiedział co i jak pisać Smile PsichiX kiedyś już dałeś mi te linki i jak wtedy tak i teraz nie potrafię tego ogarnąć :/ Nie robimy zresztą Crysis'a żeby tak kombinować z wydajnością, im prościej będzie tym lepiej.

Post został pochwalony 0 razy
Powrót do góry
Zobacz profil autora
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
PsichiX




Dołączył: 23 Sty 2012
Posty: 6
Przeczytał: 0 tematów

Ostrzeżeń: 0/5

PostWysłany: Śro 21:45, 15 Lut 2012    Temat postu:

ok, byleby nie wyszedł z tego znowu sfml, bo konstrukcja zaczyna go właśnie przypominać ;p a to "im prościej", to ja już przerobiłem w xenonie 1 - walnij potem masę danych do przetrawienia, to się renderer nie pozbiera (wersja wstępna X2 i webgl używała vbo per object), a druga sprawa, że lepiej mu renderować sety danych niżeli obiekty po kolei - mniej draw calli, tym lepiej. uwierzcie - wiem, o czym mówię. jak trzeba, to mogę zająć się renderingiem baczy, a Wy będziecie mu tylko wskazywać, co ma renderować, a co nie, jak to pokazał will Wink
mogę się zgłosić do review renderingu, jak już zrobicie.


Post został pochwalony 0 razy

Ostatnio zmieniony przez PsichiX dnia Śro 21:56, 15 Lut 2012, w całości zmieniany 4 razy
Powrót do góry
Zobacz profil autora
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
Will
Administrator



Dołączył: 20 Sty 2012
Posty: 83
Przeczytał: 0 tematów

Ostrzeżeń: 0/5

PostWysłany: Śro 21:57, 15 Lut 2012    Temat postu:

To nie jest konstrukcja im prościej tylko dobrze przemyślana struktura świetnie sprawdzająca się przy silnikach 3d i doskonale przystosowana do dzielenia całości na osobne wątki. Taki system komponentowy stosowany jest choćby przez NaughtyDog o ile się nie mylę i wiele innych silników. Jest niewiarygodnie wydajny jeśli chodzi o pamięć, wręcz kochany przez cache. Draw calli będzie tak mała ilość jak to tylko możliwe, całość render commandów jest wręcz banalna do posortowania a dzięki jakiemuś preprocessingowi można dzięki temu też łatwo wykryć co warto upchać w static meshe(choć to już przy tak małym projekcie zupełnie nieopłacalne).

Post został pochwalony 0 razy
Powrót do góry
Zobacz profil autora
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
SnowyMan




Dołączył: 21 Sty 2012
Posty: 27
Przeczytał: 0 tematów

Ostrzeżeń: 0/5

PostWysłany: Pią 19:23, 17 Lut 2012    Temat postu:

Hmm to co jeszcze jakieś pomysły? Może zrobimy już szkielecik? ^^ Podstawowe struktury, klasa RM i interface zasobów? Niech ktoś się zajmie już edytorem i opracujmy sobie jakiś format dla map kafelkowych, bo lekki zastój się zrobił :/ Aha, jeszcze chciałem powiedzieć, że możliwe, iż niedługo będę leciał do Londynu więc zniknę na jakiś tydz i ktoś będzie musiał mnie zastąpić.

Post został pochwalony 0 razy
Powrót do góry
Zobacz profil autora
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
nobody




Dołączył: 20 Sty 2012
Posty: 23
Przeczytał: 0 tematów

Ostrzeżeń: 0/5

PostWysłany: Pią 19:54, 17 Lut 2012    Temat postu:

Mogę się już w gruncie rzeczy brać za edytor (na tyle ile czas pozwoli).

Na chwilę obecną mógłbym tak właściwie zaprojektować wstępne UI oraz jakieś podstawowe funkcjonalności. Aby było coś więcej potrzebowałbym jakieś dokładniejsze informacje na temat formatu pliku, ogólnie sposób na mapę (czy korzysta z warstw, czy będzie używać kafli i takie tam) oraz wstępny interfejs renderera (najlepiej byłoby mieć od razu działający, ale mogę sobie na szybko coś dopisać pod interfejs).

Wstępne informacje na temat projektu edytora:

Technologia: C#/WPF (zdaje się, że wygrało większością głosów)
+ [link widoczny dla zalogowanych] (jeszcze z tego nie korzystałem, ale wydaje się fajną i darmową biblioteczką do dockable windows (jak to sensownie przetłumaczyć?))

Planowane funkcjonalności:
- to co każdy edytor powinien mieć (edycja mapy, właściwości obiektów itd.)
- wbudowany edytor skryptów
- możliwość edycji wielu map równocześnie
- odpalenie gry w edytorze
- możliwość edycji mechów (to IMHO warto by zorganizować jako plugin, by ułatwić użycie edytora w ewentualnych kolejnych projektach)
+ w sumie można by większość rzeczy związanych z daną grą zorganizować jako pluginy) (?)
- i może coś jeszcze Smile

Oprócz tego przydałby się jakiś SVN (niestety jeszcze z tego nie korzystałem, ale to jest raczej dosyć proste) i ew. czy ktoś jeszcze będzie brał udział w pisaniu edytora (oczywiście w tym wypadku nie mówię o pojedynczych taskach, tylko o tym jako o "głównej" profesji - chodzi o podstawowe omówienie projektu kodu.

[Edit]: Zrobiłem sobie mały test AvalonDock i to jest naprawdę fajne Wink


Post został pochwalony 0 razy

Ostatnio zmieniony przez nobody dnia Pią 20:21, 17 Lut 2012, w całości zmieniany 1 raz
Powrót do góry
Zobacz profil autora
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
Will
Administrator



Dołączył: 20 Sty 2012
Posty: 83
Przeczytał: 0 tematów

Ostrzeżeń: 0/5

PostWysłany: Sob 0:22, 18 Lut 2012    Temat postu:

Hmm.. na razie czekam na decyzje pozostałych osób bo jest kilka opcji do wyboru a jeśli będą problemy i ktoś będzie się upierał przy czymś co jest zajęte będzie kłopot.
Generalnie każdy może pisać sobie wewnętrzną bazę czyli core swojego parta bo są one niezależne od samego core mechaniki.

Przygotuje szkielet może w weekend, tak aby była baza i zrobię projekcik na assembli żeby można było dzielić się plikami.

@nobody to jest bodajże weifen. Uzywałem go do edytora dla ogre i sprawiał się bardzo dobrze więc nie powinno z nim być większych problemów.
Baze do renderingu możesz sobie napisać pod testy tylko jak chcesz robić kontaktowanie się edytora z silnikiem? tzn którą opcje wybierasz?


Post został pochwalony 0 razy
Powrót do góry
Zobacz profil autora
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
nobody




Dołączył: 20 Sty 2012
Posty: 23
Przeczytał: 0 tematów

Ostrzeżeń: 0/5

PostWysłany: Sob 13:00, 18 Lut 2012    Temat postu:

Edytor w gruncie rzeczy powinien być na tyle niezależny od silnika na ile się da. IMHO najwygodniej byłoby napisać jakiegoś pośrednika w C++/CLI, który udostępniałby tylko parę potrzebnych rzeczy. Czyli renderer i ew. jakieś specjalne rzeczy, które są wyjątkowe w tej grze (choć bardziej estetyczne byłoby traktowanie ich jako pluginów).

Wydaje mi się także, że dobrym pomysłem byłoby stworzenie w kodzie czegoś na kształt GameInstance (nazywajcie sobie jak chcecie), który dałoby się osadzić w oknie edytora na potrzeby odpalania gry w edytorze.

I w sumie jedno z najważniejszych pytań odnośnie edytora: W jakiej formie byłyby mapy? Ja widzę kilka pomysłów:
- Warstwa terenu oraz warstwa obiektów. Lub po prostu tylko warstwa obiektów i traktowanie terenu jak każdego innego obiektu (choć dla wygody pisania edytora lepiej byłoby teren traktować jednak oddzielnie). Teren dałoby się dowolnie malować teksturkami.
- To co wyżej, tylko zamiast malowalnego terenu jakieś kafle.
- Składanie mapy tylko z obiektów. Jakoś nie wydaje mi się to sensownym rozwiązaniem.

[Edit]: Jeszcze kilka rzeczy Wink
- Co myślicie o pluginowej budowie?
- GameObjecty według mnie warto by zrobić jako szablon obiektu z pliku (czyli szablon obiektu z pliku: jakie ma komponenty itd. Same podstawowe informacje). A w edytorze byłaby tylko możliwość zmiany właściwości obiektów + ew. jakiś prosty edytor szablonów.


Post został pochwalony 0 razy

Ostatnio zmieniony przez nobody dnia Sob 13:11, 18 Lut 2012, w całości zmieniany 1 raz
Powrót do góry
Zobacz profil autora
Wyświetl posty z ostatnich:   
Napisz nowy temat   Odpowiedz do tematu    Forum www.warsztatgames.fora.pl Strona Główna -> Dyskusja Ogólna Wszystkie czasy w strefie EET (Europa)
Idź do strony 1, 2, 3, 4  Następny
Strona 1 z 4

 
Skocz do:  
Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach

fora.pl - załóż własne forum dyskusyjne za darmo
Powered by phpBB © 2001, 2005 phpBB Group
Regulamin