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 |
06:16 |
|
darkrose joined #minetest-dev |
09:27 |
|
Calinou joined #minetest-dev |
10:08 |
|
PilzAdam joined #minetest-dev |
13:48 |
|
Calinou joined #minetest-dev |
15:25 |
|
hmmmm joined #minetest-dev |
15:34 |
|
doserj joined #minetest-dev |
15:47 |
|
SpeedProg joined #minetest-dev |
16:14 |
|
SpeedProg joined #minetest-dev |
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 |
17:33 |
|
doserj joined #minetest-dev |
17:52 |
|
doserj joined #minetest-dev |
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:24 |
|
doserj joined #minetest-dev |
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:05 |
|
SpeedProg joined #minetest-dev |
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 |
22:17 |
|
SpeedProg joined #minetest-dev |