示例#1
0
 public void Update(GenVariable entity)
 {
     throw new NotImplementedException();
 }
示例#2
0
    public int genGateEvent(GenRoom newRoom, int direction)
    {
        // prepare event to open the gate
        // before everything start, lets check if any monsters
        int gateOpenMethod;
        List <GenMonster> targetMonsters = new List <GenMonster>();

        if (newRoom.monsters == null)
        {
            gateOpenMethod = 0;

            // TODO: add chance to trigger/treasure open gate event here (or not here? need a better flow)
        }
        else
        {
            // lets check how many target monster here
            for (int i = 0; i < newRoom.monsters.Length; i++)
            {
                // lets assume monsterObjId 1 as target monster
                if (newRoom.monsters[i].monsterObjId == 1)
                {
                    targetMonsters.Add(newRoom.monsters[i]);
                }
            }
            // currently there should be three type of method to open gate
            gateOpenMethod = randomGen(new int[] { 0, 1 });
            if (targetMonsters.Count > 0)
            {
                // kill specific monsters can only be done when target monsters exists
                gateOpenMethod = randomGen(new int[] { 1, 2 });
            }
        }
        switch (gateOpenMethod)
        {
        case 0:
        {
            // if no monster, gate must be opened already, so add an event on level start
//          GenEvent gateOpeningEvent = new GenEvent();
//          gateOpeningEvent.triggerTypeId = GenEvent.TriggerType.LEVEL_ENTER;
//          gateOpeningEvent.results = new GenEventResult[1];
//          gateOpeningEvent.results[0] = new GenEventResult();
//          gateOpeningEvent.results[0].resultTypeId = GenEvent.ResultType.GATE_OPEN;
//          gateOpeningEvent.results[0].resultParams = new float[]{currentWorkingLevel.levelId, newRoom.roomId, direction};
//
//          currentWorkingLevel.events.Add(gateOpeningEvent);
        }
        break;

        // 1) kill all monsters
        // Event setting: all monster will add 1 to a global variable when being killed
        //					when that global variable reach the number of monsters, trigger an event to open the gate
        case 1:
        {
            // 1. set monster event, when die, add a counter
            GenVariable newVar = new GenVariable();
            newVar.variableId = variablesCounter++;
            newVar.initValue  = 0;
            variablesList.Add(newVar);

            // 2. Create an event that, when a monster dead, add up a counter
//          GenEvent monsterDieEvent = new GenEvent();
//          monsterDieEvent.triggerTypeId = GenEvent.TriggerType.MONSTER_DIE;
//          monsterDieEvent.results = new GenEventResult[1];
//          monsterDieEvent.results[0] = new GenEventResult();
//          monsterDieEvent.results[0].resultTypeId = GenEvent.ResultType.VAR_SET_AS_VAR_PLUS_NUM;
//          monsterDieEvent.results[0].resultParams = new float[]{newVar.variableId, newVar.variableId, 1f};
//
//          // 3. Create an event that, when a monster dead, check if thee counter is larger than or equal to room monster num, if yes then open the gate
//          GenEvent gateOpeningEvent = new GenEvent();
//          gateOpeningEvent.triggerTypeId = GenEvent.TriggerType.MONSTER_DIE;
//          gateOpeningEvent.conds = new GenEventCond[1];
//          gateOpeningEvent.conds[0] = new GenEventCond();
//          gateOpeningEvent.conds[0].condTypeId = GenEvent.CondType.LOGIC_LARGER_OR_EQUAL_NUM;
//          gateOpeningEvent.conds[0].condParams = new float[]{newVar.variableId, newRoom.monsters.Length};
//          gateOpeningEvent.results = new GenEventResult[1];
//          gateOpeningEvent.results[0] = new GenEventResult();
//          gateOpeningEvent.results[0].resultTypeId = GenEvent.ResultType.GATE_OPEN;
//          gateOpeningEvent.results[0].resultParams = new float[]{currentWorkingLevel.levelId, newRoom.roomId, direction};
//
//          // 4. now assign both event to every monster in room
//          for(int i=0;i<newRoom.monsters.Length;i++) {
//              if(newRoom.monsters[i].events == null) {
//                  newRoom.monsters[i].events = new List<GenEvent>();
//              }
//              newRoom.monsters[i].events.Add(monsterDieEvent);
//              newRoom.monsters[i].events.Add (gateOpeningEvent);
//          }
        }
        break;

        // 2) kill specific monsters
        // Event setting: similar to above, be the counter variable is not all monsters,
        //					and not all monsters have the triggering event
        case 2:
        {
            // 1. set monster event, when die, add a counter
            GenVariable newVar = new GenVariable();
            newVar.variableId = variablesCounter++;
            newVar.initValue  = 0;


            // 2. Create an event that, when a monster dead, add up a counter
//          GenEvent monsterDieEvent = new GenEvent();
//          monsterDieEvent.triggerTypeId = GenEvent.TriggerType.MONSTER_DIE;
//          monsterDieEvent.results = new GenEventResult[1];
//          monsterDieEvent.results[0] = new GenEventResult();
//          monsterDieEvent.results[0].resultTypeId = GenEvent.ResultType.VAR_SET_AS_VAR_PLUS_NUM;
//          monsterDieEvent.results[0].resultParams = new float[]{newVar.variableId, newVar.variableId, 1f};
//
//          // 3. Create an event that, when a monster dead, check if thee counter is larger than or equal to room monster num, if yes then open the gate
//          GenEvent gateOpeningEvent = new GenEvent();
//          gateOpeningEvent.triggerTypeId = GenEvent.TriggerType.MONSTER_DIE;
//          gateOpeningEvent.conds = new GenEventCond[1];
//          gateOpeningEvent.conds[0] = new GenEventCond();
//          gateOpeningEvent.conds[0].condTypeId = GenEvent.CondType.LOGIC_LARGER_OR_EQUAL_NUM;
//          gateOpeningEvent.conds[0].condParams = new float[]{newVar.variableId, targetMonsters.Count};
//          gateOpeningEvent.results = new GenEventResult[1];
//          gateOpeningEvent.results[0] = new GenEventResult();
//          gateOpeningEvent.results[0].resultTypeId = GenEvent.ResultType.GATE_OPEN;
//          gateOpeningEvent.results[0].resultParams = new float[]{currentWorkingLevel.levelId, newRoom.roomId, direction};
//
//          // 4. now assign both event to every monster in room
//          for(int i=0;i<targetMonsters.Count;i++) {
//              if(targetMonsters[i].events == null) {
//                  targetMonsters[i].events = new List<GenEvent>();
//              }
//              targetMonsters[i].events.Add(monsterDieEvent);
//              targetMonsters[i].events.Add (gateOpeningEvent);
//          }
        }
        break;

            // 3) use key
            // Event setting: TODO <--- seems need to expand data structure
        }

        return(gateOpenMethod);
    }