Ben büyük odalar voksel tabanlı bir 3D odalarda mühürlü olup olmadığını verimli bir şekilde belirlemek ile bazı sorunlar yaşıyorum. Yardım istemeden sorunu çözmek için elimden gelenin en iyisini yapmaya çalıştığım bir noktadayım, ama vazgeçecek kadar denemedim, bu yüzden yardım istiyorum.
Açıklığa kavuşturmak için, mühürlü, odada delik olmamasıdır. Odanın sızdırmazlığını kontrol eden oksijen sızdırmazlıkları vardır ve oksijen giriş seviyesine bağlı olarak sızdırmazdır.
Şu anda böyle yapıyorum:
- Sızdırmazlık döşemesinin üzerindeki bloktan başlayarak (havalandırma, sızdırmazlık maddesinin üst yüzündedir), bitişik 6 yönün tamamında tekrar tekrar döngü
- Bitişik karo dolu, vakumlu olmayan bir karo ise, döngüden devam edin
- Bitişik döşeme dolu değilse veya vakumlu bir döşemeyse, bitişik blokların yinelemeli olup olmadığını kontrol edin.
- Bir kutucuğun her kontrolünde bir sayacı azaltın
- Sayım sıfıra ulaşırsa, son blok bir vakumlu karoya bitişikse, alanın mühürsüz olduğuna geri dönün
- Sayım sıfıra isabet ederse ve son blok bir vakum döşemesi değilse veya sayaç sıfırdan önce yinelemeli döngü sona ererse (vakum döşemesi kalmaz), alan mühürlenir
Alan kapatılmazsa, döngüyü bazı değişikliklerle tekrar çalıştırın:
- Bitişik bloklarda vakumlu karo yerine "hava alabilir" karo olup olmadığını kontrol etme
- Azalan bir sayaç kullanmak yerine, bitişik "solunabilir hava" fayansları bulunana kadar devam edin.
- Döngü bittiğinde, kontrol edilen her bloğu bir vakum döşemesine ayarlayın.
İşte kullanıyorum kodu: http://pastebin.com/NimyKncC
Sorun:
Bu kontrolü her 3 saniyede bir çalıştırıyorum, bazen bir mühürleyen yüzlerce blok arasında döngü yapmak zorunda kalacak ve birçok oksijen sızdırmazlığı olan büyük bir dünya, birkaç saniyede bir bu çoklu tekrarlayan döngüler CPU'da çok zor olabilir.
Optimizasyon konusunda daha fazla deneyimi olan birinin bana yardım edip edemeyeceğini veya en azından beni doğru yöne yönlendirip yönlendiremeyeceğini merak ediyordum. Çok teşekkürler.