Hi!

Before there was talk about possible structures for FSM's in CEL during cspop 
for managing AI but this proposal was ousted after it was seen that quests 
could be applicable in this sense.

Now with making the movement controller for apricot character the various 
movesets have to be made and coordinated together. A monolithic design in the 
first sense may seem simpler and work better but it quickly becomes apparent 
in it's shortcomings. Namely,

  1. Methods clutter whereby functions start getting grouping prefixes to 
distinguish themselves.
  2. Extensibility by being able to tack on new components.
  3. Configuration- monolithic is essentially saying "Here's what you get"

A micro component design by contrast offers clarity at the expense of higher 
complexity and lower ease of use. The complexity comes from coordinating the 
various micro components to work together in a coherent way.

Typically when you perform an action in-game, there will be a few actions you 
cannot perform while that action is being performed. Examples can be that you 
can jump while spin-attacking but cannot grab ledges, or that you cannot jump 
while performing a roll.

Maybe pressing jump during a roll while wait for the roll to finish then 
perform an extra long rolling-jump. Notification of the roll being finished 
is not a problem in CEL as there is already a mechanism (messages). But for 
seeing that a roll is being performed the current best solution is,

  csRef<iPcRoll> roll = celQueryPropertyClassEntity<iPcRoll> (entity);
  if (roll->IsRolling ())
    // blaa

Not a problem, except due to the tight coupling with iPcRoll which totally 
destroys any reason for moveset components.

Another issue is knowing what action to perform depending on a state dependent 
in another component-

  def JumpPressed (self, entity):
      if self.jump.IsJumping ():
          self.jump.Jump ()
      else
          self.glide.Glide ()

Something more convenient and transparent for the user could be

  def __init__(self, entity):
      self.BindAction (JumpPressed, (self.Glide, self.Jump))

With the glide knowing beforehand automatically which state it is allowed to 
transition from and also with the option to have the user to override this 
and specify themselves how they want.

Essentially I'm asking what mechanism already exists in CEL (are quests 
sufficient) to have a state machine easily accessible by multiple components 
for various actions like,

  1. Can register more than one state- object can be in multiple states which 
can be removed individually. Like attacking, jumping and analogmotion.
  2. Ruleset to describe what action to execute in what components depending 
on existing states.
      Component can then ask permission to register a state- if the ruleset 
rejects the new state then the action doesn't get performed.

Thanks for your time,

Genjix

-------------------------------------------------------------------------
Sponsored by: SourceForge.net Community Choice Awards: VOTE NOW!
Studies have shown that voting for your favorite open source project,
along with a healthy diet, reduces your potential for chronic lameness
and boredom. Vote Now at http://www.sourceforge.net/community/cca08
_______________________________________________
Cel-main mailing list
Cel-main@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/cel-main

Reply via email to