glob2-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[glob2-devel] proposed state machine for the building life cycle


From: Joe Wells
Subject: [glob2-devel] proposed state machine for the building life cycle
Date: Tue, 17 Apr 2007 20:23:38 +0100
User-agent: Gnus/5.11 (Gnus v5.11) Emacs/22.0.50 (gnu/linux)

Dear Globulation 2 gurus,

Here is a suggested state machine for the building life cycle.  This
proposal solves a number of problems with the previous system:

1. It has a clean, less confusing semantics which is likely to lead to
   fewer bugs (e.g., it would probably have helped avoid the repair
   crash bug in glob2 version 0.8.22).

2. The user can request direct construction to any desired level
   without stopping at the intervening levels.

3. There is no need to repair before upgrading (is there now?), as the
   needed amount of resources will be calculated correctly.

4. Clearing is automatically requested, saving the user from the pain
   of setting clearing areas and flags before starting construction.

5. It solves the bug where upgrading is silently canceled when
   resources grow on the larger area needed before all the globules
   are out of the building and out of the larger area.

6. Visually distracting forbidden/guard/clearing areas are removed
   from the areas occupied by buildings.

7. Abuse of construction sites is impossible.

The technical details follow below.

Comments are welcome!  Is this a good idea or does it suck?

-- 
Joe

----------------------------------------------------------------------

This proposal has benefited from comments by Eli Dupree, Leo, and Kai.

Each building has these parameters: its type T, its state S, two
levels C (current) and D (desired), and its number of requested
workers W.  During ordinary use, C=D.  It is only during the
construction/upgrade process that C can differ from D.  Each building
also has two sets of resources: its construction resources (all the
resources used so far to build and upgrade it), and its supply
resources (the resources gathered for ordinary use of the building).
While in any state, as hitpoints are lost due to damage, the
construction resources of the building are reduced appropriately.

There is a table Work such that Work(T,S,L) gives the number of
workers to use for a building of type T in state S at level L.

New buildings start with state S=“R”, with C=0 (meaning not yet
existing), with no resources (construction or supply), and with the
target level D≥1.

The possible states are as follows:

“R” (clearing resources):

  While in this state, the building occupies the area of a level C
  building.  (If C=0, this is no area at all, and workers/warriors can
  walk on it and resources can grow on it.  In this case, it is
  probably desirable to show a ghost of the size D version so the user
  can see what they have requested and have something to click on to
  see and adjust the status.)  Upon entry into this state, clearing
  cells are placed and all forbidden or guard cells are removed on the
  area needed for a level D building.  Upon exit from this state, all
  forbidden/guard/clearing cells are removed on the area needed for a
  level D building.  While in this state, the building site acts like
  a clearing flag, summoning a number of workers given by W, which is
  set to Work(T,“R”,D) upon entry into this state.  If all the
  resources are cleared, the building switches to state S=“F”.  If
  construction is canceled, the building switches to state S=“U”, with
  the value of D changing to be the same as C.

“F” (shooing the workers and warriors):

  While in this state, the building occupies the area of a level C
  building.  (See comment for state R regarding the C=0 case.)  Upon
  entry into this state, forbidden and clearing cells are placed and
  all guard cells are removed on the area needed for a level D
  building.  Upon exit from this state, all forbidden/guard/clearing
  cells are removed on the area needed for a level D building.  If all
  the workers and warriors exit the area, the building switches to
  state S=“B”.  If any resources grow on the area, the building
  switches to state S=“R”.  If construction is canceled, the building
  switches to state S=“U”, with the value of D changing to be the same
  as C.

“B” (building):

  While in this state, the building occupies the area of a level D
  building.  While in this state, the building increases its
  construction resources to the level required for a building of type
  T and level D by summoning the number of workers given by W, which
  is set to Work(T,“B”,D) upon entry into this state.  If all the
  needed resources arrive, the building switches to state S=“U”, with
  the value of C changing to be the same as D.  If construction is
  canceled, the building switches to state S=“U”, with the value of D
  changing to be the same as C.  (The construction resources
  accumulated are remembered, so one can restart an upgrade or repair
  later and continue from where one left off.)

“U” (use):

  This is the state for normal use.  While in this state, the building
  occupies the area of a level D building.  Upon entry to this state,
  D and C must have the same value.  Upon entry to this state, if
  D=C=0, then the building disappears.  (This happens if you cancel
  construction on a new building before ever entering state U.  In
  this case you lose any resources gathered so far.)  While in this
  state, the building summons to supply it the number of workers given
  by W, which is set to Work(T,“U”,D) upon entry into this state
  (and which will only be non-zero for buildings that need workers to
  supply them during ordinary use).  If repair is requested, the
  building switches to state S=“E” (with no change to D).  If upgrade
  to level L>D is requested, the building switches to state S=“E” with
  D=L.

“E” (emptying):

  While in this state, the building occupies the area of a level C
  building.  Upon entry into this state, clearing cells are placed and
  all forbidden or guard cells are removed on the area needed for a
  level D building.  Upon exit from this state, all
  forbidden/guard/clearing cells are removed on the area needed for a
  level D building.  In this state, the building waits for any
  globules inside to exit and does not accept any new guests.  If the
  globules all exit, the building switches to state S=“R”.  If
  construction is canceled, the building switches to state S=“U”, with
  the value of D changing to be the same as C.

(How the values in the table Work are determined is outside of the
scope of this proposal and is a completely separate issue.  I suggest
the user interface should allow setting all of them separately.  It
should be possible to solve problems like the fact that you currently
can not set the number of workers for a construction site of a new
building until the globules leave the construction location.  Or the
fact that you can't set the number of workers while waiting for
globules to exit the building.)




reply via email to

[Prev in Thread] Current Thread [Next in Thread]