widelands-dev team mailing list archive
-
widelands-dev team
-
Mailing list archive
-
Message #02540
Re: Fwd: can find any more resources
This is probably good idea, but how to implement it?
In current AI I found following piece of code:
// Subscribe to NoteFieldPossession.
field_possession_subscriber_ =
Notifications::subscribe<NoteFieldPossession>([this](const
NoteFieldPossession& note) {
if (note.player != player_) {
return;
}
if (note.ownership == NoteFieldPossession::Ownership::GAINED) {
unusable_fields.push_back(note.fc);
}
});
Can somebody direct me further?
Thanks
Tibor
2014-07-29 12:02 GMT+02:00 Fòram na Gàidhlig <fios@xxxxxxxxxxxxxxxxxxx>:
> You could check for the code where production programs (for mines) and
> production sites (for other sites) send "Out of Resources" messages. The
> production program has a handle on the production site, so both of these
> could set a flag in the production site that the AI could check for, or
> whenever the player gets a notification message the AI gest a message as
> well. This way, the calculation of the check if a site is out of
> resources remains with the production and worker programs.
>
>
>
> 29/07/2014 08:52, sgrìobh Tibor Bamhor:
> > SirVer,
> >
> >
> > I tried, spend some time, but all those namespaces, classes, virtual
> > functions are too complicated to me. I even failed to identify a place
> > (source file) where such function would logically belong.
> >
> >
> > :(
> >
> >
> >
> > 2014-07-25 22:58 GMT+02:00 Holger Rapp <HolgerRapp@xxxxxxx
> > <mailto:HolgerRapp@xxxxxxx>>:
> >
> > Hooray \o/ !!!
> >
> > On 25.07.2014, at 22:23, Tibor Bamhor <tiborb95@xxxxxxxxx
> > <mailto:tiborb95@xxxxxxxxx>> wrote:
> >
> >> I will look at it...and do what I can..
> >>
> >>
> >> 2014-07-25 22:08 GMT+02:00 Holger Rapp <HolgerRapp@xxxxxxx
> >> <mailto:HolgerRapp@xxxxxxx>>:
> >>
> >> Which just strengthens my argument, right? The code there is
> >> already copy and pasted and if anything changes you have to
> >> change it twice. With your change we need to change it three
> >> times.
> >>
> >> You are a good programmer and can do it. If you do not do it
> >> you accrue technical debt that others have to suffer under
> >> later on.
> >>
> >>
> >> On 25.07.2014, at 21:52, Tibor Bamhor <tiborb95@xxxxxxxxx
> >> <mailto:tiborb95@xxxxxxxxx>> wrote:
> >>
> >>> similar procedure is used twice in production_program.cc, but
> >>> both istances adds some own woodo-magic I dont fully
> >>> understand and dont need. So there is no count-resources-only
> >>> algorithm used there so for me it is hard to integrate. Maybe
> >>> for more skilled programmer it would be doable...
> >>>
> >>>
> >>> 2014-07-25 21:35 GMT+02:00 Holger Rapp <HolgerRapp@xxxxxxx
> >>> <mailto:HolgerRapp@xxxxxxx>>:
> >>>
> >>>
> >>> On 25.07.2014, at 21:31, Tibor Bamhor <tiborb95@xxxxxxxxx
> >>> <mailto:tiborb95@xxxxxxxxx>> wrote:
> >>>
> >>>> Hi,
> >>>>
> >>>> In the meantime I looked into particular cc file (I dont
> >>>> remember which one) and in AI I implemented basically
> >>>> the same procedure - AI counts current and starting
> >>>> amount of resources within radius around a mine and
> >>>> calculate the % of exhaustion.
> >>>
> >>> That is really bad. We already have enough copy & pasted
> >>> code in Widelands. Please do not add to this. Pull the
> >>> common function into a new common header and use it from
> >>> the AI and the old code, please.
> >>>
> >>>> Seems it works fine.
> >>>>
> >>>> Also it would be usefull if AI could query&modify ware's
> >>>> target quantities. So far there are no ready-for-AI
> >>>> functions for this it seems. I am considering to write
> >>>> them, but perhaps some more skillfull programmer could
> >>>> do the job.
> >>>>
> >>>> To be consistent with similar functions used by AI, new
> >>>> functions could be:
> >>>> int send_player_get_ware_target(ware)
> >>>> bool send_player_set_ware_target(ware, int)
> >>>>
> >>>>
> >>>>
> >>>>
> >>>>
> >>>>
> >>>> 2014-07-25 21:01 GMT+02:00 Holger Rapp
> >>>> <HolgerRapp@xxxxxxx <mailto:HolgerRapp@xxxxxxx>>:
> >>>>
> >>>>
> >>>> On 25.07.2014, at 00:04, Tibor Bamhor
> >>>> <tiborb95@xxxxxxxxx <mailto:tiborb95@xxxxxxxxx>>
> wrote:
> >>>>
> >>>>> well, after some investigation in code it seems
> >>>>> that mine is able to mine some % of resources
> >>>>> within some radius. Obviously it does not mine
> >>>>> resources evenly across fields, so to check one
> >>>>> (even central) field is not enough.
> >>>>
> >>>> You could randomize the field that resources are
> >>>> taken from, so that this happens evenly.
> >>>>
> >>>>>
> >>>>> Also it seems that there is no avaiable function to
> >>>>> query if mineable resources are mined or not yet.
> >>>>> Of course, the mine sends a message ("cant find any
> >>>>> more resources") but I am not sure if AI can easily
> >>>>> read them. It would help much…
> >>>>
> >>>> So there must be a method in the mine that does it
> >>>> already. You can pull it out and make it available
> >>>> for the AI to use. Something like void
> >>>> percentage_of_coal_available(field, radius,
> >>>> coal_resource_index,
> >>>> & total_pieces_of_coal_at_start,
> >>>> &total_pieces_of_coal_now);
> >>>>
> >>>>>
> >>>>>
> >>>>>
> >>>>> ---------- Forwarded message ----------
> >>>>> From: *Tibor Bamhor* <tiborb95@xxxxxxxxx
> >>>>> <mailto:tiborb95@xxxxxxxxx>>
> >>>>> Date: 2014-07-24 23:05 GMT+02:00
> >>>>> Subject: can find any more resources
> >>>>> To: widelands-dev@xxxxxxxxxxxxxxxxxxx
> >>>>> <mailto:widelands-dev@xxxxxxxxxxxxxxxxxxx>
> >>>>>
> >>>>>
> >>>>> Hi,
> >>>>>
> >>>>> Please explain to me:
> >>>>>
> >>>>> I am watching a game (testing AI), there is a mine
> >>>>> that shows "can't find any more resources",
> >>>>> performance % is 0, it is full of food, yet when I
> >>>>> click on it and click DBG it shows coal: 19/20.
> >>>>> This is coal mine (the first/lowest level of mine).
> >>>>>
> >>>>> Now for AI it is quite relevant question - AI test
> >>>>> remaining resource on the field and if 0, the mine
> >>>>> is to be dismounted. But if mine is not able to
> >>>>> mine all resources on a field, then things are
> >>>>> getting more complicated.
> >>>>>
> >>>>> Now I noticed that mines have aihint like
> >>>>> mines_percent=30. Does it mean that this mine can
> >>>>> mine only 30% of initial amount 20? 30% of 20 is 6
> >>>>> so the mine should stuck on remaining resources
> >>>>> 14/20, or not?
> >>>>>
> >>>>> Waiting for explanation, thanks!
> >>>>>
> >>>>> Tibor
> >>>>>
> >>>>>
> >>>>> _______________________________________________
> >>>>> Mailing list: https://launchpad.net/~widelands-dev
> >>>>> Post to : widelands-dev@xxxxxxxxxxxxxxxxxxx
> >>>>> <mailto:widelands-dev@xxxxxxxxxxxxxxxxxxx>
> >>>>> Unsubscribe : https://launchpad.net/~widelands-dev
> >>>>> More help : https://help.launchpad.net/ListHelp
> >>>>
> >>>>
> >>>> _______________________________________________
> >>>> Mailing list: https://launchpad.net/~widelands-dev
> >>>> Post to : widelands-dev@xxxxxxxxxxxxxxxxxxx
> >>>> <mailto:widelands-dev@xxxxxxxxxxxxxxxxxxx>
> >>>> Unsubscribe : https://launchpad.net/~widelands-dev
> >>>> More help : https://help.launchpad.net/ListHelp
> >>>
> >>>
> >>
> >>
> >
> >
> >
> >
> > _______________________________________________
> > Mailing list: https://launchpad.net/~widelands-dev
> > Post to : widelands-dev@xxxxxxxxxxxxxxxxxxx
> > Unsubscribe : https://launchpad.net/~widelands-dev
> > More help : https://help.launchpad.net/ListHelp
> >
> >
> >
> > No virus found in this message.
> > Checked by AVG - www.avg.com <http://www.avg.com>
> > Version: 2014.0.4716 / Virus Database: 3986/7937 - Release Date: 07/28/14
> >
>
> _______________________________________________
> Mailing list: https://launchpad.net/~widelands-dev
> Post to : widelands-dev@xxxxxxxxxxxxxxxxxxx
> Unsubscribe : https://launchpad.net/~widelands-dev
> More help : https://help.launchpad.net/ListHelp
>
Follow ups
References