protected void CompleteCurrentState() { switch (state) { case Constant.AvatarState.EATING: break; case Constant.AvatarState.SLEEPING: break; case Constant.AvatarState.WORKING: break; case Constant.AvatarState.ADVENTURE: break; } state = Constant.AvatarState.IDLING; bool isEndDayStateLoop = false; envManage.player.playerData.dayStateLoopCount++; if (envManage.player.playerData.dayStateLoopCount > 0 && envManage.player.playerData.dayStateLoopCount % Constant.DAY_STATE_LOOP_THRESHOLD == 0) { envManage.player.playerData.dayStateLoopCount %= Constant.DAY_STATE_LOOP_THRESHOLD; isEndDayStateLoop = true; } // Update playerData to save to file envManage.player.playerData.UpdateAvatarState(avatarIndex, state, isEndDayStateLoop); }
public void UpdateAvatarState(int avatarIndex, Constant.AvatarState state, bool isEndDayStateLoop) { Reward reward = new Reward(); switch (avatarIndex) { case 0: reward = avatarData1.SetState(state, cafeLevel, dormLevel, factoryLevel, null, isEndDayStateLoop); break; case 1: reward = avatarData2.SetState(state, cafeLevel, dormLevel, factoryLevel, null, isEndDayStateLoop); break; case 2: reward = avatarData3.SetState(state, cafeLevel, dormLevel, factoryLevel, null, isEndDayStateLoop); break; } if (reward.energyGain > 0) { // Update material cost if from factory working to idling if (factoryLevel == 1) { materialAmount += Constant.FACTORY_MATERIAL_COST_LEVEL_1; } else if (factoryLevel == 2) { materialAmount += Constant.FACTORY_MATERIAL_COST_LEVEL_2; } // Update enercy collected if from factory working to idling energyAmount += reward.energyGain; Debug.Log("Reward: energy get " + reward.energyGain); } // Update collected item from adventure foreach (var item in reward.items) { int alreayHaveCount = 0; bool hasValue = this.items.TryGetValue(item.Key, out alreayHaveCount); if (hasValue) { this.items[item.Key] = alreayHaveCount + item.Value; } else { this.items[item.Key] = item.Value; } } }
public virtual void LoadData(AvatarData avatarData, Slot slot) { this.state = avatarData.state; this.currentDropSlot = slot; if (slot != null) { ChangePosition(currentDropSlot.transformToBeSet.position); ChangeAnimation(ANIMATOR_IS_DROPPING_PROPERTY_NAME + currentDropSlot.level, true); ChangeAnimation(ANIMATOR_IS_DRAGGING_PROPERTY_NAME, false); } else { ChangeAnimation(ANIMATOR_IS_DRAGGING_PROPERTY_NAME, false); if (currentDropSlot != null) { ChangeAnimation(ANIMATOR_IS_DROPPING_PROPERTY_NAME + currentDropSlot.level, false); currentDropSlot = null; } ChangePosition(initialPosition); } }
public AvatarData(int index) { this.index = index; switch (index) { case 0: this.name = Constant.AVATAR1_NAME; break; case 1: this.name = Constant.AVATAR2_NAME; break; case 2: this.name = Constant.AVATAR3_NAME; break; } level = 1; hungry = Constant.AVATAR_MAX_HUNGRY_LEVEL_1; sanity = Constant.AVATAR_MAX_SANITY_LEVEL_1; state = Constant.AvatarState.IDLING; slotIndex = -1; }
protected void UpdateState(Constant.AvatarState state) { // This update state will only be triggered when mouse is up/down, does not mean it finish current task this.state = state; envManage.player.playerData.UpdateAvatarState(avatarIndex, state, false); }
public Reward SetState(Constant.AvatarState state, int cafeLevel, int dormLevel, int factoryLevel, Adventure adventure, bool isEndDayStateLoop) { Reward reward = new Reward(); if (state == Constant.AvatarState.IDLING) { switch (this.state) { // Update avatar status data based on current level case Constant.AvatarState.EATING: UpdateStatusCafeComplete(cafeLevel); break; case Constant.AvatarState.SLEEPING: UpdateStatusDormComplete(dormLevel); break; case Constant.AvatarState.ADVENTURE: reward = UpdateAdventureComplete(adventure); break; case Constant.AvatarState.WORKING: reward = UpdateStatusFactoryComplete(factoryLevel); break; default: // Do nothing break; } slotIndex = -1; } else if (state == Constant.AvatarState.ADVENTURE && adventure != null) { this.adventure = adventure; } // Update avatar dead days if it has < 0 sanity/hungry if (this.hungry <= 0 || this.sanity <= 0) { if (deadDaysCount >= 3) { Debug.Log("3 days hungry/sanity below 0, dead"); isDead = true; } else { Debug.Log("Dead days ++"); deadDaysCount++; } } else { deadDaysCount = 0; isDead = false; } // Update if 3 day state change reached if (isEndDayStateLoop && !isDead) { UpdateStatusDayStateComplete(); } this.state = state; return(reward); }