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

  1. beginStateMachine()
  2.     
  3.     onEnter(function(msg)
  4.         print("EatByTable onEnter------------------------------");
  5.     end )
  6.     
  7.     onExit(function(msg)
  8.         print("EatByTable onExit--------------------------------");
  9. --        local chair = retrieveStateObject("chair");
  10. --        if (chair) then
  11. --            getParent().unlockActionPoints(chair);
  12. --            getParent().stopAllActivities(chair);
  13. --            removeStateObject("chair");
  14. --        end;
  15. --        
  16. --        local table = retrieveStateObject("table");
  17. --        if (table) then
  18. --            getParent().unlockActionPoints(table);
  19. --            getParent().stopAllActivities(table);
  20. --            removeStateObject("table");
  21. --        end;
  22.         
  23.         unlockAll("chair");        
  24.         unlockAll("table");
  25.         
  26.         local partner = retrieveStateObject("partner");
  27.         if (partner) then
  28.             getParent().unlockActionPoints(partner);
  29.             getParent().stopAllActivities(partner);
  30.             removeStateObject("partner");
  31.         end;
  32.         
  33.         getParent().stopAllActivities();
  34.         
  35.     end )
  36.         
  37.     
  38.     -- sit down on chair
  39.     state("sitDown")
  40.     
  41.         onEnter(function(msg)
  42.         
  43.         
  44.             print("sitDown onEnter");
  45.             local chair = retrieveStateObject("chair");
  46.             
  47.             if (chair) then
  48.                 --chair does exist
  49.                 
  50.                 if exitIfWrongPosition(getParent(), chair, retrieveData("chairActionPointName")) then return end;    
  51.                 
  52.                 
  53.                 if (getParent().isOneActionPointLocked(chair)) then
  54.                     -- action point is locked
  55.                     getParent().setEmoticon(EMOTICON_CANNOT, EMOTICON_DELAY);
  56.                     sendMsg("emoThink", getParent().walkSO);
  57.                     exitAndGoAway();
  58.                     return
  59.                 else
  60.                     getParent().lockActionPoints(chair);
  61.                     -- check wich side of chair
  62.                     local actionPointName = retrieveData("chairActionPointName");
  63.                     print("Eat by table actionPointName" .. actionPointName);
  64.     
  65.                      if (actionPointName == "sit2") then
  66.                         storeData("mirrorAnims", true);
  67.                     else
  68.                         storeData("mirrorAnims", false);
  69.                     end
  70.                     
  71.                 end
  72.             else
  73.                 -- chair does not exist anymore
  74.                 print("no chair");
  75.                 getParent().setEmoticon(EMOTICON_NOSEAT, EMOTICON_DELAY);
  76.                 sendMsg("emoThink", getParent().walkSO);
  77.                 exitAndGoAway();
  78.                 return
  79.             end
  80.         
  81.         
  82.                     
  83.             
  84.             -- tablet can be a pizza box too
  85.             local tablet = getParent().getLeftHeldObject();
  86.             if (not tablet) then
  87.                 print("no tablet");
  88.                 freeHands(getParent());
  89.                 exitAndGoAway();
  90.                 return
  91.             end;
  92.             
  93.             getParent().detachLeftObjectHolder();
  94.             getParent().handSO.stopPose();
  95.             
  96.             local tableVer = getTableVersion(tablet);
  97.             if (tableVer ~= tablet) then tablet.deleteGameObject(); end;
  98.             tablet = tableVer;
  99.             
  100.             if (not tablet) then
  101.                 print("no table tablet");
  102.                 exitAndGoAway();
  103.                 return
  104.             end;
  105.             
  106.             
  107.             tablet.buy(); -- pay money for food
  108.  
  109.             storeStateObject("tablet", tablet);
  110.             
  111.             
  112.             local table = retrieveStateObject("table");
  113.             local tableActionPointName = retrieveData("tableActionPointName");
  114.             local tableHeight = table.getTableHeight();
  115.             local tablePos = tablet.tableYPosition;
  116.             if (not tablePos) then print("WARNING no attribute -tableYPosition- found"); tablePos = 0; end;
  117.             table.addObjectToActionPoint(tablet, tableActionPointName, 0, tablePos, tableHeight);
  118.             
  119.  
  120.  
  121.             setPose("sitdownChair", retrieveData("mirrorAnims"));
  122.             --print("sitDown onEnter mirrorAnims" .. retrieveData("mirrorAnims"));
  123.                                     
  124.             chair.startAnimation("ChairSitdown");
  125.             chair.playSound("Stuhl hinsetzen");
  126.             -- send a delayed message for sit sound
  127.             sendDelayedMsgThis("sitSound", 2500);
  128.  
  129.                         
  130.         end )
  131.         
  132. --        
  133.     
  134.         onMsg("end", function(msg)
  135.             setCurrentPosition();
  136.             if testCancel() then
  137.                 setState("standUp");
  138.             else
  139.                 setState("eatSitting");
  140.             end
  141.         end )    
  142.     
  143.         onMsg("queue", function(msg)
  144.             setState("standUp");
  145.         end )        
  146.     
  147.         onMsg("sitSound", function(msg)
  148.             local chair = retrieveStateObject("chair");
  149.             --chair.playSound("Stuhl setzen");
  150.             makeChairSound(chair, "Down");
  151.         end )    
  152.         
  153.         onMsg("act", function(msg)
  154.             doSomething();
  155.             sendDelayedMsgThis("act", 5000);
  156.         end )
  157.         
  158.         
  159.         
  160.         
  161.     -- eat sitting on chair
  162.     state("eatSitting")
  163.     
  164.         onEnter(function(msg)
  165.             print("eatSitting onEnter");
  166.             
  167.             
  168.             local tablet = retrieveStateObject("tablet");
  169.             --local eat = getParent().startActivity("eat", tablet);
  170.             local eat = getParent().startActivity(getEatActivityName(tablet), tablet);
  171.             local length = getActivityLength(eat);
  172.             print("eatSitting onEnter started " .. getEatActivityName(tablet) .. " on ".. tablet.getType() .." for " .. length);
  173.  
  174.             local chair = retrieveStateObject("chair");
  175.             getParent().startActivity("sit", chair);
  176.             
  177.             -- doesnt work because of a bug. objects are not deleted if tablet is.
  178. --            local fork = tablet.createGameObject("fork");
  179. --            local knife = tablet.createGameObject("knife");
  180. --            local glass = tablet.createGameObject("glass");
  181.  
  182.             local glassName = cond(tablet.glass, tablet.glass, "glass")
  183.             storeData("glassName", glassName);
  184.  
  185.             -- create hand objects
  186.             local fork = getParent().loadGameObject("StandardGO","fork");
  187.             local knife = getParent().loadGameObject("StandardGO","knife");
  188.             local glass = getParent().loadGameObject("StandardGO", glassName);
  189.  
  190.             storeStateObject("fork", fork);
  191.             storeStateObject("knife", knife);
  192.             storeStateObject("glass", glass);
  193.             
  194.             fork.setVisibility(false);
  195.             knife.setVisibility(false);
  196.             glass.setVisibility(false);
  197.             
  198.             
  199. --            fork.setMeshVisibility("fork", false);
  200. --            knife.setMeshVisibility("knife", false);
  201. --            glass.setMeshVisibility("glass", false);
  202.             
  203. --            getParent().attachLeftObjectHolder(fork);
  204. --            getParent().attachRightObjectHolder(knife);
  205. --            getParent().attachRightObjectHolder(glass);
  206.             
  207.             
  208.  
  209.             sendDelayedMsgThis("lookForPartner", 1200);
  210.             sendDelayedMsgThis("testCancel", CANCEL_POLLING_INTERVAL);
  211.             sendDelayedMsgThis("testComplete", length);
  212.             
  213.             sendMsgThis("startLoop");
  214.             
  215.             local buttonText = tablet.buttonText;
  216.             if (not buttonText) then buttonText = "pm_eat"; end;
  217.             setTopQueueEntry(getParent(), buttonText)
  218.             
  219.         end )
  220.         
  221.         
  222.         onExit(function(msg)
  223.         
  224.             print("eatSitting onExit");
  225.             
  226.             local table = retrieveStateObject("table");
  227.             dirtify(table, DIRTIFY_PER_TABLE_EAT);
  228.             
  229.             partner = retrieveStateObject("partner");
  230.             if (partner) then
  231.                 print("eatSitting onExit: getParent().stopAllActivities(partner)");
  232.                 getParent().stopAllActivities(partner);
  233.                 removeStateObject("partner");
  234.             end
  235.             
  236.         end )
  237.         
  238.         
  239.         
  240.         
  241.         onMsg("startLoop", function(msg)
  242.             startAnimation("eatSitting", false);
  243.                         
  244.             sendDelayedMsgThis("grabFork", 1200);
  245.             sendDelayedMsgThis("grabKnife", 1200);
  246.             sendDelayedMsgThis("eatSound", 3500);
  247.             sendDelayedMsgThis("dropFork", 8000);
  248.             sendDelayedMsgThis("dropKnife", 8000);
  249.             sendDelayedMsgThis("eatSound", 7000);
  250.             sendDelayedMsgThis("grabGlass", 9400);
  251.             sendDelayedMsgThis("drinkSound", 10500);
  252.             sendDelayedMsgThis("dropGlass", 12200);
  253.         end )
  254.         
  255.         onMsg("eatSound", function(msg)
  256.             getParent().playSound("eat2");
  257.         end )
  258.         
  259.         onMsg("drinkSound", function(msg)
  260.             getParent().playSound(genderizeReal(getParent(), "drink"));
  261.         end )
  262.         
  263.         onMsg("grabFork", function(msg)
  264.             -- show hand fork
  265.             local fork = retrieveStateObject("fork");
  266.             fork.setVisibility(true);
  267.             --fork.setMeshVisibility("fork", true);
  268.             --fork.setEnable(true, false);
  269.             getParent().attachLeftObjectHolder(fork);
  270.             -- hide tablet fork
  271.             local tablet = retrieveStateObject("tablet");
  272.             if (tablet) then tablet.setChildEnable("fork", false); end;
  273.         end )
  274.         
  275.         onMsg("grabKnife", function(msg)
  276.             -- show hand knife
  277.             local knife = retrieveStateObject("knife");
  278.             knife.setVisibility(true);
  279.             --knife.setMeshVisibility("knife", true);
  280.             --knife.setEnable(true, false);
  281.             getParent().attachRightObjectHolder(knife);
  282.             -- hide tablet knife
  283.             local tablet = retrieveStateObject("tablet");
  284.             if (tablet) then tablet.setChildEnable("knife", false); end;
  285.         end )
  286.         
  287.         onMsg("grabGlass", function(msg)
  288.             -- show hand glass
  289.             local glass = retrieveStateObject("glass");
  290.             glass.setVisibility(true);
  291.             --glass.setMeshVisibility("glass", true);
  292.             --glass.setEnable(true, false);
  293.             getParent().attachRightObjectHolder(glass);
  294.             -- hide tablet glass
  295.             local tablet = retrieveStateObject("tablet");
  296.             if (tablet) then tablet.setChildEnable("glass", false); end;
  297.         end )
  298.         
  299.         onMsg("dropFork", function(msg)
  300.             -- hide hand fork
  301.             local fork = retrieveStateObject("fork");
  302.             fork.setVisibility(false);
  303.             --fork.setMeshVisibility("fork", false);
  304.             --fork.setEnable(false, false);
  305.             getParent().detachLeftObjectHolder();
  306.             -- show tablet fork
  307.             local tablet = retrieveStateObject("tablet");
  308.             if (tablet) then tablet.setChildEnable("fork", true); end;
  309.         end )    
  310.         
  311.         onMsg("dropKnife", function(msg)
  312.             -- hide hand knife
  313.             local knife = retrieveStateObject("knife");
  314.             knife.setVisibility(false);
  315.             --knife.setMeshVisibility("knife", false);                
  316.             --knife.setEnable(false, false);
  317.             getParent().detachRightObjectHolder();
  318.             -- show tablet knife
  319.             local tablet = retrieveStateObject("tablet");
  320.             if (tablet) then tablet.setChildEnable("knife", true); end;
  321.         end )
  322.  
  323.         onMsg("dropGlass", function(msg)
  324.             -- hide hand glass
  325.             local glass = retrieveStateObject("glass");
  326.             glass.setVisibility(false);
  327.             --glass.setMeshVisibility("glass", false);                
  328.             --glass.setEnable(false, false);
  329.             getParent().detachRightObjectHolder();
  330.             -- show tablet glass
  331.             local tablet = retrieveStateObject("tablet");
  332.             if (tablet) then tablet.setChildEnable("glass", true); end;            
  333.         end )
  334.  
  335.         onMsg("lookForPartner", function(msg)
  336.  
  337.             local table = retrieveStateObject("table");
  338.             
  339.             local partner = getTableTalkPartner(getParent(), table);
  340.             if (not partner) then
  341.                 print("lookForPartner: no partner found");
  342.                 partner = retrieveStateObject("partner");
  343.                 if (partner) then
  344.                     print("lookForPartner: getParent().stopAllActivities(partner)");
  345.                     getParent().stopAllActivities(partner);
  346.                     removeStateObject("partner");
  347.                 end
  348.                 sendDelayedMsgThis("lookForPartner", 1000);
  349.                 return
  350.             end
  351.             storeStateObject("partner", partner);
  352.             
  353.             if (isEating(getParent()) and isEating(partner)) then
  354.                 
  355.                 if (getParent().hasActivityName("eatDinner") and partner.hasActivityName("eatDinner") and hasLightenCandles(table)) then
  356.                     -- start candle light dinner
  357.                     print("start candlelightDinner " .. getParent().getCharacterName() .. " -> " .. partner.getCharacterName());
  358.                     local candlelightDinner = getParent().startActivity("candlelightDinner", partner);
  359.                     local length = getActivityLength(candlelightDinner);
  360.                     print("start candlelightDinner " .. getParent().getCharacterName() .. " -> " .. partner.getCharacterName() .. " for " .. length);
  361.                     sendDelayedMsgThis("complete", length);
  362.                 else
  363.                     -- start normal eating together
  364.                     if (not getParent().hasActivityName("eatTogether")) then
  365.                         -- start activity "eat together
  366.                         local eatTogether = getParent().startActivity("eatTogether", partner);
  367.                     end
  368.                     
  369.                 end
  370.             end
  371.             
  372.             
  373.             sendDelayedMsg("talk", getParent().mimicSO, random(0,9000));
  374.             sendDelayedMsgThis("lookForPartner", 13000);
  375.             
  376.         end )
  377.         
  378.         onMsg("testCancel", function(msg)
  379.             if testCancel() or (not this.getParent().getCurrentActivityGain()) then
  380.                 sendMsgThis("complete");
  381.             else
  382.                 sendDelayedMsgThis("testCancel", CANCEL_POLLING_INTERVAL);
  383.             end
  384.         end )
  385.         
  386.         onMsg("testComplete", function(msg)
  387.             if (getParent().hasActivityName("candlelightDinner")) then
  388.                 sendDelayedMsgThis("testComplete", CANCEL_POLLING_INTERVAL);
  389.             else
  390.                 sendMsgThis("complete");
  391.             end
  392.         end )
  393.         
  394.         
  395.         onMsg("complete", function(msg)
  396.             
  397.             getParent().detachLeftObjectHolder();
  398.             getParent().detachRightObjectHolder();
  399.             
  400.             local fork = retrieveStateObject("fork");
  401.             if (fork) then fork.deleteGameObject(); removeStateObject("fork"); end;
  402.             
  403.             local knife = retrieveStateObject("knife");
  404.             if (knife) then knife.deleteGameObject(); removeStateObject("knife");  end;
  405.             
  406.             local glass = retrieveStateObject("glass");
  407.             if (glass) then glass.deleteGameObject(); removeStateObject("glass");  end;
  408.                     
  409.             setState("standUp");
  410.         end )
  411.         
  412.  
  413.         onMsg("end", function(msg)
  414. --            if (testCancel() or (getParent().getCondition(NEED_HUNGER) > 0.99)) then
  415.             if testCancel() or (not this.getParent().getCurrentActivityGain()) then
  416.                 sendMsgThis("complete");
  417.             else
  418.                 sendMsgThis("startLoop");            
  419.             end
  420.         end )    
  421.         
  422.                 
  423.     -- stand up from chair
  424.     state("standUp")
  425.     
  426.         onEnter(function(msg)
  427.         
  428.             print("standUp::onEnter");
  429.             
  430.             
  431.             
  432.             local tablet = retrieveStateObject("tablet");
  433.             local plate = getDirtyDishVersion(tablet);
  434.             if (tablet) then 
  435.                 getParent().stopAllActivities(tablet);
  436.                 tablet.deleteGameObject();
  437.             end;
  438.             
  439.             
  440.             -- place dirty plate on table
  441.             --local plate = getParent().loadGameObject("StandardGO","plate");
  442.             
  443.             
  444.             local table = retrieveStateObject("table");
  445.             local actionPointName = retrieveData("tableActionPointName");
  446.             plate.storeData("placeActionPointName", actionPointName);
  447.             local tableHeight = table.getTableHeight();
  448.             local tablePos = plate.tableYPosition;
  449.             if (not tablePos) then print("WARNING no attribute -tableYPosition- found"); tablePos = 0; end;
  450.             
  451.             table.addObjectToActionPoint(plate, actionPointName, 0, tablePos, tableHeight);
  452.             
  453.             
  454.         
  455.             startAnimation("standupChair", retrieveData("mirrorAnims"));
  456.                             
  457.             sendDelayedMsgThis("upSound", 900);
  458.  
  459.             
  460.             local chair = retrieveStateObject("chair");
  461.             chair.startAnimation("ChairSitdown", -1);
  462.             getParent().stopAllActivities(chair);
  463.             
  464.         end )
  465.     
  466.         
  467.         onMsg("upSound", function(msg)
  468.             local chair = retrieveStateObject("chair");
  469.             makeChairSound(chair, "Up");
  470.         end )    
  471.     
  472.         onMsg("end", function(msg)
  473.             setCurrentPosition();
  474.             exitAndGoAway();
  475.         end )    
  476.     
  477. endStateMachine()