public void Update(GenVariable entity) { throw new NotImplementedException(); }
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); }