Time Nick Message 00:00 celeron55 plus a few more 'm's 00:07 hmmmm where exactly does the 'gamedef' come into existance 00:07 hmmmm i can see the different defs being created in Server ctor but not the gamedef itself 00:08 hmmmm this is the sort of situation where globals would REALLY be helpful 00:08 hmmmm i am spending a lot of time trying to find the "right" places to put things 00:09 celeron55 oh 8) 00:09 celeron55 http://minetest.net/wiki/doku.php?id=code:general_architecture 00:09 celeron55 that does mention it 00:10 celeron55 the gamedef is an interface that is implemented by the Server and the Client classes (for the applicable parts) 00:10 hmmmm ohhhhh 00:10 hmmmm the server class itself IS the gamedef 00:10 hmmmm pffffffffftttttttthh 00:13 hmmmm why is IRollbackReportSink part of IGameDef and not simply Server? 00:13 hmmmm same with sound 00:19 celeron55 because IGameDef is automatically available where those functionalities are needed 00:19 celeron55 not Server, or Client 00:19 celeron55 it's the same pointer, but casting it for that would be silly 00:25 celeron55 IGameDef is kind of a "resource router" thing 01:13 hmmmm oh right 01:14 hmmmm so asynchronous reads of the map 01:14 hmmmm because you're using sqlite3 (or leveldb, or whatever), you're going to be io bound when the emerge thread could be doing something more worthwhile 01:14 hmmmm sitting there like a shmuck, waiting for the disk to do whatever 01:15 hmmmm so i've been thinking that there'll be instead of number_of_cores threads, there'll be number_of_cores + 1 threads 01:16 hmmmm it might be worthwhile to have a list of already existing blocks handy 01:16 hmmmm that way no disk access would be required to tell if you need to start generating or not 01:19 hmmmm if i understand correctly, JThread has some kind of mechanism to create worker threads 01:20 hmmmm i'm gonna have to try to set thread affinity if i want this to work the way i intended, which means OS specific stuff, which i'd rather just add to JThread 01:21 hmmmm i'm getting way too ahead of myself here 16:41 PilzAdam this patch exists for a long time and no problems appears while using, so i guess we can merge this upstream: https://github.com/celeron55/minetest/pull/286 16:43 PilzAdam it makes the digging animation look like you are actaullay digging 16:44 PilzAdam celeron55, what do you think? 16:59 hmmmm oh boy 16:59 hmmmm everything is built around the assumption that mapgen will never be an object 17:00 hmmmm so i think i may have a solution: i make an emerge object and plop that into the gamedef or rather Server 17:01 hmmmm and that'll be able to access things such as water_level and the BiomeDefManager and what not that are needed by what otherwise would be static methods 17:01 hmmmm this has the potential to be elegant but i have to rip out even more machinery 17:03 hmmmm probably not too bad, this way the rest of the code gets an overhaul (although it stinks that i have to modify pretty much unrelated parts in order to get this working right) 17:07 hmmmm so perhaps i call this an EmergeDispatcher or EmergeManager or something... this is what you use to add blocks to the queue with - well, it'd be figuring out which mapgen thread to use based on some really simplistic scheduling (like maybe it gets added to the thread with the least number of blocks to process?) 17:09 hmmmm on that note, i think i'm going to go ahead with creating a std::map of all existing blocks on map load so i don't need to do any disk access at all to see if something needs generating or not 17:09 hmmmm so i'd have an EmergeDiskWorkerThread and multiple EmergeGenWorkerThread 17:10 hmmmm it's settled, i'll call it EmergeManager 17:11 hmmmm I think i'd like to split off all the emerge related code into a separate file, emerge.cpp 18:11 PilzAdam thexyz, what do you think about this? https://github.com/celeron55/minetest/pull/286 18:12 thexyz i've never tested that patch 18:13 PilzAdam you should, it looks very nice 18:13 thexyz ok 18:13 hmmmm all it does is change a couple constants around. it doesn't really need to be tested 18:13 thexyz just to make sure it looks better 18:19 thexyz isn't it way too fast? 18:19 PilzAdam no, its actually slower than the current one 18:20 thexyz strange 18:21 thexyz how about that one? https://github.com/celeron55/minetest/pull/285 18:22 darkrose that seems awesome, wish I had 3D glasses 18:22 PilzAdam yea the idea is nice 18:24 PilzAdam thexyz, if you slow the animation down it may look strange with the cracks growing; because with the patch it grows ~ the same speed as you dig 18:27 PilzAdam it also looks better when placing nodes 18:27 PilzAdam if you would slow it down the nodes would be placed faster than the animation 18:28 thexyz well, then ask someone else to test it 18:29 thexyz for me the current and the new one both look nice 18:29 PilzAdam darkrose, what do you mean about the digging animation? 18:31 darkrose what? 18:32 PilzAdam https://github.com/celeron55/minetest/pull/286 18:32 PilzAdam s/mean/think 18:32 darkrose ah 18:32 darkrose looks ok to me 18:32 PilzAdam so can i merge it? 18:32 thexyz still, i think that anaglyph patch should at least be capable of changing colors 18:33 darkrose PilzAdam: sure 18:33 darkrose https://github.com/celeron55/minetest/pull/284 <- is also good with me 18:35 PilzAdam i have talked a lot with RBA about that 18:35 PilzAdam about the next steps in formspec etc. 18:36 hmmmm eh... 18:36 hmmmm should be using istream to parse floats form a string, the alpha color should be 0,0,0 18:37 hmmmm or rather, console_color from the settings 18:39 thexyz stof() 18:40 thexyz from util/string.h 18:43 thexyz oh, it already uses that 18:45 hmmmm hrm, actually irrlicht documentation is vague on the point of the four colors that are the "corners of the rect" ? since all four are 255,255,255,255, that's the same as the default, so really he doesn't need to use that version of the function 19:39 hmmmm grr.. 19:39 hmmmm ServerMap is a big offender 19:40 hmmmm oh yeah, getBlockAsInteger needs to be fixed sometime but that'll break map file compatibility so it needs to be handled specially 19:41 PilzAdam better break some compatibility than keep bugs in the code 19:42 hmmmm it's a bug that nobody's seen before because nobody's gone out far enough in the map 19:42 hmmmm s/far out enough/high or deep enough/ 19:42 hmmmm it absolutely needs to be fixed for the nether to work 19:42 PilzAdam does it cause any "visual" errors? 19:42 PilzAdam oh, okay 19:43 hmmmm (instead of being in a different dimension like minecraft, it's just a really low y point, like -4000 or whatever) 19:47 PilzAdam more like -10000 19:50 hmmmm huh? no, bugs start happening around -4000 19:50 hmmmm ' return (sqlite3_int64)pos.Z*16777216 + 19:50 hmmmm (sqlite3_int64)pos.Y*4096 + (sqlite3_int64)pos.X; ' 19:54 hmmmm ah man this is killing me... should i pass along an EmergeManager when creating ServerMap? 19:55 hmmmm it's incredible how many humungous changes i have to make because some abstraction was poorly designed early on 19:56 hmmmm i guess my real question ought to be this: 19:57 hmmmm is it a good idea to bind an EmergeManager (basically, set of mapgen objects and a biomedefmanager) to a specific ServerMap? 19:57 PilzAdam "Do not create large class hierarchies or use templates when not necessary. Procedural code in C is faster, more maintainable and more portable." from http://www.minetest.net/wiki/doku.php?id=contrib 19:58 PilzAdam maybe this helps to decide 19:58 hmmmm that's what he says but that's not what's possible 19:58 hmmmm i'm not exactly sure if this is a 'large class heirarchy' though 19:58 hmmmm so here's the simplified version of what i did: 19:59 hmmmm EmergeManager spawns a BiomeDefManager and then EmergeDiskWorkerThread and multiple EmergeGenWorkerThreads 20:00 hmmmm this EmergeManager object is to the associated with the Server which is a derived class of Gamedef 20:00 hmmmm but server-specific 20:00 hmmmm now, the ServerMap called static mapgen functions that are simply not possible to keep as static even though it'd be way easier 20:01 hmmmm specifically, initBlockMake which is in ServerMap for some reason, and findGroundLevel 20:02 hmmmm the comment for ServerMap says "this is the only map class that is able to generate map" 20:02 hmmmm so i am taking that as permission to make EmergeManager a member of ServerMap 20:06 hmmmm oh! this is good, I don't need to change the constructor at all 20:07 hmmmm ServerMap already takes a GameDef 20:07 hmmmm but the downside is that if i don't want to cast this, i'd have to make the EmergeManager a part of IGameDef instead of Server 20:07 hmmmm i'm not really sure why ServerMap doesn't take a Server * anyway, since it's a *SERVER* map