January 25, 2018

Gtkd için şunu denedim:

                   dosya.rawRead((&falcon4_ct.id)[0..1]);
                   model.ekle("Id= ", falcon4_ct.id);

Sonra veri modelinin ekle parametresinin ikincisini int olarak değiştirdim. Bu şekilde kayıdı doğru gösterdi.

Ya da string olmasını istiyorsak:

       import std.conv;

       model.ekle("Id= ", to!string(falcon4_ct.id));

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

January 25, 2018

Benim asıl dikkatimi çeken de dünkü programda nasıl olur da yapının boyutunu 84 gösteriyor.

   /* ... */

   for (int i = 0; i < numEntities; ++i)
   {
       kütük.rawRead((&currentEntity)[0..1]);
       writeln("Current entity id ", currentEntity.vuClassData.id);
       writeln("Size ", currentEntity.sizeof);

   }

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

January 25, 2018

seninki yine iyi bende 88 çıkıyor :-D

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

January 25, 2018

Ali hocanın söylediği gibi hizalamayı ayarlayınca düzeldi.

import std.stdio;
import std.conv;
import std.bitmanip;

align(1)
struct VuEntity
{
align(1):
   ushort id;
   ushort collisionType;
   float collisionRadius;
   byte[8] classInfo;
   uint updateRate;
   uint updateTolerance;
   float fineUpdateRange;
   float fineUpdateForceRange;
   float fineUpdateMultiplier;
   uint damageSeed;
   int hitPoints;
   ushort majorRevisionNumber;
   ushort minorRevisionNumber;
   ushort createPriority;
   byte managementDomain;
   byte transferable;
   byte private1;
   byte tangible;
   byte colidable;
   byte global;
   byte persistent;
   byte[3] padding;
}

align(1)
struct Falcon4Entity
{
align(1):
   VuEntity vuClassData;
   short[7] visType;
   short vehicleDataİndex;
   byte dataType;
   uint dataPtr;
}

void main()
{
   byte[] bellek;
   bellek.length = 1024;

   auto kütük = File("FALCON4.ct", "r");

   short numEntities;

   numEntities = kütük.rawRead(new short[1])[0];
   writeln("Number of entities ", numEntities);

   Falcon4Entity[] entities;

   entities.length = numEntities;

   auto readEntities = kütük.rawRead(entities);

   for (int i = 0; i < numEntities; ++i)
   {
       writeln("Size in bytes ", readEntities[i].sizeof);
       writeln("Id ", readEntities[i].vuClassData.id);
       writeln("Collision type ", readEntities[i].vuClassData.collisionType);
       writeln("Collision radius ", readEntities[i].vuClassData.collisionRadius);
       writeln("Data pointer ", readEntities[i].dataPtr);
   }
}

Burada yapının yazdırma işini 'toString()' ile yapsak daha iyi olur.

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

January 25, 2018
   byte[] bellek;
   bellek.length = 1024;

bu nerde kullanılıyor ? silinecek herhalde değilmi Erdem hocam..

Birde burda ID sürekli 0 değeri çıkartıyor.. sanırım benim verdiğim değişikliğin işlenmemiş hali bu zira 81 bytedan fazla olmalıki tutsun..

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

January 25, 2018

Alıntı (cos00kun):

>
>     byte[] bellek;
>     bellek.length = 1024;
> ```

>
> bu nerde kullanılıyor ? silinecek herhalde değilmi Erdem hocam..
>

Evet haklısın burası silinecek.

Alıntı (cos00kun):
>
> Birde burda ID sürekli 0 değeri çıkartıyor.. sanırım benim verdiğim değişikliğin işlenmemiş hali bu zira 81 bytedan fazla olmalıki tutsun..
>

Ubuntu altında çıktısı şu şekilde :

Alıntı:
>
> Number of entities 3956
> Size in bytes 81
> Id 60395
> Collision type 0
> Collision radius 0
> Data pointer 0
> Size in bytes 81
> Id 60395
> Collision type 0
> Collision radius 0
> Data pointer 155
> Size in bytes 81
> Id 60395
> Collision type 0
> Collision radius 0
> Data pointer 3
> Size in bytes 81
> Id 60395
> Collision type 0
> Collision radius 0
> Data pointer 8
> Size in bytes 81
> Id 60395
> Collision type 0
> Collision radius 0
> Data pointer 9
>

Sakın baytların dizilimiyle alakalı olmasın. 'Big Endian', 'Little Endian' falan fıstık diyorlar ya.

-- 
[ Bu gönderi, <http://ddili.org/forum>'dan dönüştürülmüştür. ]
January 25, 2018

Erdem hocam sitesinde yazan yapı sanırım eski o yüzden ben doğru sıralamayı ve btye dizilimini buldum sanırım.. şimdiye kadar kullandığım programlarda test ettiğimde doğru değerleri veriyor yani artık struct yapımızın kesinlikle şöyle olması gerekiyor

struct  FALCON4_ct {
   short numEntities;
   ushort id;
   ushort collisionType;
   float collisionRadius;
   byte[8] classInfo;
   uint updateRate;
   uint updateTolerance;
   float fineUpdateRange;
   float fineUpdateForceRange;
   float fineUpdateMultiplier;
   uint damageSeed;
   int hitpoints;
   ushort majorRevisionNumber;
   ushort minorRevisionNumber;
   ushort createPriority;
   byte managementDomain;
   byte transferable;
   byte private_;
   byte tangible;
   byte collidable;
   byte global;
   byte persistent;
   ushort padding1_2;
   byte padding3;
   short[7] visType;
   short vehicleDataIndex;
   byte dataType;
   ushort dataPtr;
   short unknow1;
}

Böyle yaparsak hatasız okunuyor :-)

Bu arada burada code yazarken code alanının farklı bir renkle ekrana çıkması sağlanamazmı acaba ? daha iyi olur düşüncesindeyim kendimce

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

January 25, 2018

Alıntı (cos00kun):

>

Bu arada burada code yazarken code alanının farklı bir renkle ekrana çıkması sağlanamazmı acaba ? daha iyi olur düşüncesindeyim kendimce

Bu kısmı anlamadım ama gösterdiğim program senin ortamında nasıl çıktı veriyor.

Senin gösterdiğin yapının boyutu 88 gösteriyor. 'numEntities' yapı üyesi değil. Sadece dosyanın başında kaç tane yapı okuyacağımızı gösteren bir rakam. Hadi diyelim ki iki yapıyı birleştirmiş olsan ama gene örneğin bu alan ' byte[3] padding;' 3 bayt olacak.

Ali hocanın yazdığı programa da bakarsan 2 tane yapı kullanmış.

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

January 25, 2018

Erdem hocam anlamadığın kısmın programla bir alakası yok sadece burda topicte mesaj yazarken kodları yazdığımız kısımın arka zemin rengi biraz farklı olsa iyi olurdu diyorum.. nasılki alıntı yaptığımızda arka zemin rengi hafif bir koyulaşıyorsa kod bölümüde aynısı olsa demek istemiştim :blush:

Gelelim Programa.. Ali hocanın iki ayrı struct kullanma sebebi sitesinde öyle yazması ama orda aslında gruplama yapmaya çalışmış yani buna gerek yok aslında.. Evet yanlış değil ama gerekte yok.. Şöyle düşün ordaki site belkide 20 yıldır var ve eski haliyle duruyor ve bu uçuş simülasyonu gönüllülerce o gün bugün sürekli geliştiriliyor.. Zamanında buna hizmet etmiş biri olarakta gururla izliyorum zaman zaman :blush:

Dosya yapısını daha doğrusu hangi dosyanın neler yapabileceğini çok iyi bilen biri olarak bu konuda bana güvenebilirsin ;-)

ister tek struct ister iki struct olsun farketmez sonuçta benim yaptığım türleri kullanmamız lazım. Yukarıda;
eski kodda yani sizin kullandığınızda 'byte[3] padding;' benimkinde 'ushort padding1_2;' oldu ve ardından 'byte padding3;' eklendi
yine sizdeki 'uint dataPtr;' bende 'ushort dataPtr;' ve ardından ' short unknow1;' eklendi

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

January 25, 2018

Hizalama (alignment) ile ilgili olabilir. Ben o yüzden align(1) kullanmış olmalıyım:

http://ddili.org/forum/post/12949

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]