home *** CD-ROM | disk | FTP | other *** search
/ Singles (French) / Singles-FrenchVersion-Win95.iso / data1.cab / Statemachine / playByTableChar.lua < prev    next >
Text File  |  2004-03-05  |  12KB  |  459 lines

  1. beginStateMachine()
  2.     
  3.     onEnter(function(msg)
  4.     
  5.         print("play by table character state machine onEnter ");
  6.         local chair = retrieveStateObject("chair");
  7.         if (not chair) then
  8.             print("playByTableChar::onEnter: no chair");
  9.         end
  10.         --storeStateObject("chair", chair);
  11.         
  12.         if (chair) then
  13.             local actionPointName = retrieveData("chairActionPointName");
  14.             if exitIfWrongPosition(getParent(), chair, actionPointName) then return end;                
  15.  
  16.             --chair does exist
  17.             if (getParent().isOneActionPointLocked(chair)) then
  18.                 -- action point is locked
  19.                 getParent().setEmoticon(EMOTICON_CANNOT, EMOTICON_DELAY);
  20.                 sendMsg("emoThink", getParent().walkSO);
  21.                 exitStateMachine();
  22.             else
  23.                 getParent().lockActionPoints(chair);
  24.                 -- check wich side of chair
  25.                 --local actionPointName = retrieveData("chairActionPointName");
  26.                 print("Play by table actionPointName" .. actionPointName);
  27.  
  28.                  if (actionPointName == "sit2") then
  29.                     storeData("mirrorAnims", true);
  30.                 else
  31.                     storeData("mirrorAnims", false);
  32.                 end
  33.                 
  34.             end
  35.         else
  36.             -- chair does not exist anymore
  37.             getParent().setEmoticon(EMOTICON_CANNOT, EMOTICON_DELAY);
  38.             sendMsg("emoThink", getParent().walkSO);
  39.             exitStateMachine();
  40.         end
  41.     end )
  42.     
  43.     onExit(function(msg)
  44. --        local chair = retrieveStateObject("chair");
  45. --        if (chair) then
  46. --            getParent().unlockActionPoints(chair);
  47. --            getParent().stopAllActivities(boardgame);
  48. --            removeStateObject("chair");
  49. --        end;
  50.         
  51.         local partner = retrieveStateObject("partner");
  52.         if (partner) then
  53.             getParent().unlockActionPoints(partner.getParent());
  54.             getParent().stopAllActivities(partner.getParent());
  55.             removeStateObject("partner");
  56.         end;
  57.                 
  58. --        removeStateObject("table");
  59. --        removeStateObject("boardgame");
  60.         
  61.         unlockAll("chair");        
  62.         unlockAll("table");        
  63.         unlockAll("boardgame");        
  64.             
  65.         getParent().stopAllActivities();    
  66.     end )
  67.     
  68.     -- sit down on chair
  69.     state("sitDownWithGame")
  70.     
  71.         onEnter(function(msg)
  72.             print("sitDownWithGame onEnter");
  73.             local chair = retrieveStateObject("chair");
  74.             if (not chair) then
  75.                 print("eatByTableChar::sitDown::onEnter: no chair");
  76.             end
  77.             
  78.             setPose("sitdownChair", retrieveData("mirrorAnims"));
  79.                                     
  80.             chair.startAnimation("ChairSitdown");
  81.             chair.playSound("Stuhl hinsetzen");
  82.             -- send a delayed message for sit sound
  83.             sendDelayedMsgThis("sitSound", 2500);
  84.             
  85. --            local boardgame = retrieveStateObject("boardgame");
  86. --                    
  87. --            if (not boardgame) then
  88. --                print("playByTableChar::sitDown::onEnter: no boardgame box");
  89. --            else
  90. --                getParent().detachRightObjectHolder();
  91. --                getParent().detachLeftObjectHolder();                
  92. --                boardgame.deleteGameObject();                                            
  93. --            end
  94.  
  95.             freeHands(getParent());
  96.             
  97.             print("create opened game");
  98.             local boardgame = getParent().loadGameObject("StandardGO","boardgame");
  99.             storeStateObject("boardgame", boardgame);
  100.             
  101.             local table = retrieveStateObject("table");
  102.             local tableActionPointName = retrieveData("tableActionPointName");
  103.             local tableHeight = table.getTableHeight();
  104.             print("tableHeight: " .. tableHeight);
  105.             local tablePos = boardgame.tableYPosition;
  106.             if (not tablePos) then print("WARNING no attribute -tableYPosition- found"); tablePos = 0; end;
  107.             table.addObjectToActionPoint(boardgame, tableActionPointName, 0, tablePos, tableHeight);
  108.             
  109.             
  110.             -- we need free hands for playing
  111.             local hands = getParent().handSO;
  112.             if (not hands) then
  113.                 print("no hands found");
  114.             else
  115.                 hands.stopPose();
  116.             end
  117.                         
  118.             storeData("activePart", true);
  119.  
  120.             
  121.         end )
  122.     
  123.     
  124.         onMsg("queue", function(msg)
  125.             setState("standUp");
  126.         end )        
  127.     
  128.         onMsg("sitSound", function(msg)
  129.             local chair = retrieveStateObject("chair");
  130.             --chair.playSound("Stuhl setzen");
  131.             makeChairSound(chair, "Down");
  132.         end )    
  133.         
  134.         onMsg("act", function(msg)
  135.             doSomething();
  136.             sendDelayedMsgThis("act", 5000);
  137.         end )
  138.         
  139.         onMsg("end", function(msg)
  140.             setCurrentPosition();
  141.             if testCancel() then
  142.                 setState("standUp");
  143.             end
  144.             setState("waitForPartner");
  145.         end )    
  146.         
  147.     -- sit down on chair
  148.     state("sitDown")
  149.     
  150.         onEnter(function(msg)
  151.         
  152.             print("sitDown onEnter");
  153.             local chair = retrieveStateObject("chair");
  154.             if (not chair) then
  155.                 print("playByTableChar::sitDown::onEnter: no chair");
  156.                 exitStateMachine();
  157.                 return
  158.             end
  159.             
  160.             local boardgame = retrieveStateObject("boardgame");
  161.             if (not boardgame) then
  162.                 print("playByTableChar::sitDown::onEnter: no boardgame");
  163.                 exitStateMachine();
  164.                 return
  165.             end
  166.             
  167.             
  168.             setPose("sitdownChair", retrieveData("mirrorAnims"));
  169.                                     
  170.             chair.startAnimation("ChairSitdown");
  171.             chair.playSound("Stuhl hinsetzen");
  172.             -- send a delayed message for sit sound
  173.             sendDelayedMsgThis("sitSound", 2500);
  174.         end )
  175.         
  176.             
  177.         onMsg("sitSound", function(msg)
  178.             local chair = retrieveStateObject("chair");
  179.             --chair.playSound("Stuhl setzen");
  180.             makeChairSound(chair, "Down");
  181.         end )
  182.         
  183.         onMsg("end", function(msg)
  184.             setCurrentPosition();
  185.             if testCancel() then
  186.                 setState("standUp");
  187.                 return
  188.             end
  189.             
  190.             local partner = retrieveStateObject("partner");
  191.             if (not partner) then
  192.                 print("no partner found");
  193.                 return
  194.             end
  195.             sendMsg("partnerReady", partner);
  196.             setState("playSitting");
  197.         end )    
  198.         
  199.         
  200.     state("waitForPartner")
  201.     
  202.         onEnter(function(msg)
  203.             print("waitForPartner onEnter");
  204.                         
  205.             sendDelayedMsgThis("callPartner", 1000);
  206.             sendDelayedMsgThis("stopWaiting", 30000);
  207.         end )
  208.         
  209.         
  210.         onMsg("callPartner", function(msg)
  211.         
  212.             print("callPartner");
  213.             
  214.             if (testCancel()) then
  215.                 sendMsgThis("stopWaiting");
  216.                 return
  217.             end        
  218.             
  219.             
  220.             
  221.             -- get the game object server
  222.             local gameObjectServer = getParent().getGameObjectServer();
  223.  
  224.             
  225.             local partner = getOtherCharacter(getParent());
  226.             
  227.             if (not partner or not isIdle(partner)) then
  228.                 print("waitForPartner: no partner found");
  229.                 getParent().setEmoticon(EMOTICON_NOPARTNER, EMOTICON_DELAY);
  230.                 sendDelayedMsgThis("callPartner", 1000);
  231.                 return
  232.             end
  233.             
  234.             
  235.             local table = retrieveStateObject("table");
  236.             local tableActionPointName = retrieveData("tableActionPointName");
  237.             local partnerChair = getOpposedChair(table, tableActionPointName);
  238.             if (not partnerChair) then
  239.                 print("waitForPartner: no partner chair found");
  240.                 partner.setEmoticon(EMOTICON_NOSEAT, EMOTICON_DELAY);
  241.                 sendDelayedMsgThis("callPartner", 1000);
  242.                 return
  243.             end
  244.             
  245.             local chairActionPoint = partner.getClosestFreeActionPoint(partner, partnerChair, {"sit1", "sit2"});
  246.             if (not chairActionPoint) then
  247.                 print("waitForPartner: partner chair in use TODO: check if partner allready sitting");
  248.                 partner.setEmoticon(EMOTICON_CANNOT, EMOTICON_DELAY);
  249.                 sendDelayedMsgThis("callPartner", 1000);
  250.                 return
  251.             end
  252.             
  253.             local wso = partner.walkSO;
  254.             storeStateObject("partner", wso);
  255.             
  256.             
  257.             if (not wso.walkToActionPoint(chairActionPoint)) then
  258.                 print("waitForPartner: partner cant reach chair");
  259.                 partner.setEmoticon(EMOTICON_NOPATH, EMOTICON_DELAY);
  260.                 sendDelayedMsgThis("callPartner", 1000);
  261.                 return
  262.             end
  263.             
  264.             local boardgame = retrieveStateObject("boardgame");
  265.  
  266.             -- create partners state machine contexts
  267.             local wsoContext = StateMachineContext();
  268.             wsoContext.storeStateObject("boardgame", boardgame);
  269.             wsoContext.storeStateObject("chair", partnerChair);
  270.             wsoContext.storeStateObject("partner", this);
  271.             wsoContext.storeData("chairActionPointName", chairActionPoint.getName());
  272.             wsoContext.storeData("activePart", false);
  273.             
  274.             --this.storeData("activePart", true);
  275.  
  276.             -- send partner to chair
  277.             wso.queueStateMachine("playByTableChar.sitDown", this, wsoContext);        
  278.         
  279.         
  280.         end )
  281.         
  282.         
  283.  
  284. --        onMsg("end", function(msg)
  285. --            if (testCancel()) then
  286. --                local partner = retrieveStateObject("partner");
  287. --                sendMsg("partnerStopped", partner);
  288. --                setState("standUp");
  289. --            else
  290. --                if (getParent().isMale()) then
  291. --                    startAnimation("boardgameMike", retrieveData("mirrorAnims"));
  292. --                else
  293. --                    startAnimation("boardgameElaine", retrieveData("mirrorAnims"));
  294. --                end
  295. --            end
  296. --        end )
  297.             
  298.         onMsg("partnerReady", function(msg)
  299.             local partner = retrieveStateObject("partner");
  300.             getParent().replaceQueueEntry(0, "pm_play");
  301.             partner.getParent().pushQueueEntry("pm_play"); 
  302.             setState("playSitting");
  303.             
  304.         end )
  305.         
  306.         onMsg("partnerStopped", function(msg)
  307.             setState("standUp");
  308.         end )        
  309.                 
  310.     
  311.         onMsg("stopWaiting", function(msg)
  312.             print("stopWaiting");
  313.             local partner = retrieveStateObject("partner");
  314.             if (partner) then sendMsg("partnerStopped", partner); end;
  315.             setState("standUp");
  316.         end )        
  317.                 
  318.         onMsg("queue", function(msg)
  319.             local partner = retrieveStateObject("partner");
  320.             if (partner) then sendMsg("partnerStopped", partner); end;
  321.             setState("standUp");
  322.         end )        
  323.         
  324.         
  325.         
  326.         
  327.     state("playSitting")
  328.     
  329.         onEnter(function(msg)
  330.             print("playSitting onEnter");
  331.             
  332.             if (getParent().isMale()) then
  333.                 -- only sent for mike. elaine always has the first turn
  334.                 sendDelayedMsgThis("startLoop", 12000);
  335.             else
  336.                 sendMsgThis("startLoop");
  337.             end
  338.             
  339.                                                 
  340.             local boardgame = retrieveStateObject("boardgame");
  341.             local playBoardgame = getParent().startActivity("playBoardgame", boardgame);
  342.             local length = getActivityLength(playBoardgame);
  343.  
  344.             sendDelayedMsgThis("complete", length);
  345.             sendDelayedMsgThis("testCancel", CANCEL_POLLING_INTERVAL);
  346.         end )
  347.         
  348.         onExit(function(msg)
  349.             local boardgame = retrieveStateObject("boardgame");
  350.             if (not boardgame) then
  351.                 print("no boardgame to delete stop activities found")
  352.             else
  353.                 getParent().stopAllActivities(boardgame);
  354.             end
  355.         end )
  356.         
  357.         onMsg("startLoop", function(msg)
  358.             startAnimation(genderize(getParent(), "boardgame"), retrieveData("mirrorAnims"));
  359.             sendDelayedMsgThis("talk", 12000);
  360.             sendDelayedMsgThis("diceSound", 5600);
  361.             sendDelayedMsgThis("moveSound", 8000);
  362.         end )
  363.         
  364.         onMsg("diceSound", function(msg)
  365.             getParent().playSound("gameDice");
  366.         end )
  367.         
  368.         onMsg("moveSound", function(msg)
  369.             getParent().playSound("gameMove");
  370.         end )
  371.  
  372.         onMsg("talk", function(msg)
  373.             print("talk in wso  " .. getParent().getCharacterName());
  374.             sendMsg("talk", getParent().mimicSO);
  375.             sendDelayedMsgThis("talk", 24000);
  376.         end )
  377.                 
  378.         onMsg("partnerStopped", function(msg)
  379.             print("partnerStopped rec")
  380.             setState("standUp");
  381.         end )        
  382.             
  383.         onMsg("complete", function(msg)
  384.             local partner = retrieveStateObject("partner");
  385.             sendMsg("partnerStopped", partner);
  386.             setState("standUp");
  387.         end )        
  388.             
  389.         onMsg("testCancel", function(msg)
  390.             local boardgame = retrieveStateObject("boardgame");
  391.         
  392.             if testCancel() or (not this.getParent().getCurrentActivityGain() or (not boardgame)) then
  393.                 sendMsgThis("complete");
  394.             else
  395.                 sendDelayedMsgThis("testCancel", CANCEL_POLLING_INTERVAL);
  396.             end
  397.         end )
  398.                         
  399.     
  400.         onMsg("end", function(msg)
  401.             if (testCancel()) then
  402.                 sendMsgThis("complete");
  403.             else
  404.                 sendMsgThis("startLoop");
  405.             end
  406.         end )    
  407.     
  408.                 
  409.     -- stand up from chair
  410.     state("standUp")
  411.     
  412.         onEnter(function(msg)
  413.         
  414.             print("standUp::onEnter");
  415.         
  416.             startAnimation("standupChair", retrieveData("mirrorAnims"));
  417.             
  418.             sendDelayedMsgThis("upSound", 900);
  419.             
  420.             
  421.             local chair = retrieveStateObject("chair");
  422.             chair.startAnimation("ChairSitdown", -1);
  423.             
  424.             
  425.             
  426.             getParent().detachLeftObjectHolder();
  427.             getParent().detachRightObjectHolder();
  428.                         
  429. --~             local boardgame = retrieveStateObject("boardgame");
  430. --~             if (not boardgame) then
  431. --~                 print("no boardgame to delete found")
  432. --~             else
  433. --~                 getParent().stopAllActivities(boardgame);
  434. --~                 --boardgame.deleteGameObject();
  435. --~             end
  436.             
  437.         end )
  438.         
  439.         
  440.         onMsg("upSound", function(msg)
  441.             local chair = retrieveStateObject("chair");
  442.             makeChairSound(chair, "Up");
  443.         end )    
  444.     
  445.     
  446.         onMsg("end", function(msg)
  447.         
  448.             if (retrieveData("activePart")) then
  449.                 local boardgame = retrieveStateObject("boardgame");
  450.                 if (boardgame) then
  451.                     boardgame.deleteGameObject();
  452.                 end
  453.             end
  454.             
  455.             setCurrentPosition();
  456.             exitAndGoAway();
  457.         end )    
  458.     
  459. endStateMachine()