On 02.01.2013 11:29, Michael T. Pope wrote:
> On Sat, 29 Dec 2012 08:25:20 PM Michael T. Pope wrote:
>    
>> On Sat, 29 Dec 2012 09:53:28 AM Michael Vehrs wrote:
>>      
>>>> Then for now how about we just rename the existing basicProduction as
>>>> basicPerUnitProduction and add a new field for the non-unit production.
>>>>          
>>> I had this idea, too. For the sake of compatibility, I think it would be
>>> better to keep the (misleading) name basicProduction and introduce a new
>>> field with a new name for non-unit production, however. In fact, why not
>>> call it nonUnitProduction?
>>>        
>> OK, lets go with that for now.  I fear the backward compatibility code is
>> going to be awkward either way.
>>      
> Actually, I think we can get most of the way with scopes.  Or at least we can
> get closer now that I have fixed them to work with modifiers attached to
> Buildings (svn.10433).  If Buildings then calculate bonuses with
> getModifierSet(...<unitType>  ...) for the units present and 
> getModifierSet(...
> <buildingType>  ...) for the building itself, then something like:
>
>      <building-type id="model.building.townHall" basicProduction="3"
>                     produces="model.goods.bells">
>        <modifier id="model.goods.bells" type="additive" value="1">
>          <scope type="model.building.townHall"/>
>        </modifier>
>
> should work.  (Although not so well with the crosses situation, unless a
> model.building.cathedral matches a<scope type="model.building.chapel"/>)
>    

That won't work. You either need to use several scopes, or introduce an 
ability and use a scope with that.

> [Aside: while digging into this, I was trying to use a matchesNull="false"
> scope attribute, which did not appear to work.  Deep inside
> FeatureContainer.getModifierSet() we have:
>
>              if (fcgot == null) {
>                  result.addAll(modifierSet);
>              } else {
>                  for (Modifier modifier : modifierSet) {
>                      if (modifier.appliesTo(fcgot, turn)) 
> result.add(modifier);
>                  }
>              }
>
> which looks like that if the object (fcgot) is null then all the modifiers are
> just accepted, and thus a matchesNull test will never get a chance to fail.
> I tried dropping the null test case, but that broke a tile production test,
> which (surprise) is the only place current where matchesNull=false is
> relevant, so either I am wrong, or we have two other problems:-S.]
>    

At the very least, it is confusing. Twice, at least, I meant to revamp 
the scopes and limits to use something more like standard predicate 
logic, but I never got around to it. Maybe this year...

>
> Fixing things with spec changes is of course not going to work for existing
> saved games.  In future should we think about adding a version to the spec and
> auto-upgrade specs seen in saved games, or is that getting too intrusive?
>    

That way lies madness, in my opinion.

> Cheers,
> Mike Pope
>    

Regards

Michael


------------------------------------------------------------------------------
Master Java SE, Java EE, Eclipse, Spring, Hibernate, JavaScript, jQuery
and much more. Keep your Java skills current with LearnJavaNow -
200+ hours of step-by-step video tutorials by Java experts.
SALE $49.99 this month only -- learn more at:
http://p.sf.net/sfu/learnmore_122612 
_______________________________________________
Freecol-developers mailing list
Freecol-developers@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/freecol-developers

Reply via email to