Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- private function checkMix():Boolean
- {
- if(_selectedProductData)
- {
- //product selected
- return checkProductData();
- }else if(!_selectedProductData && _processManager.processes.length)
- {
- //no product selected, but processes have been added
- return checkProductFreeData();
- return false;
- }else
- {
- //no product selected, no processes added
- return false;
- }
- _checkMix.visible = false;
- }
- private function checkProductData():Boolean
- {
- var selectedProcesses:Array = _selectedProductData['processes'];
- var processes:Array = _processManager.processes;
- var checkProcesses:Boolean = checkProcessData(selectedProcesses, processes, true);
- if(checkProcesses)
- {
- //processes are correct
- for(var i:int=0;i<processes.length;i++)
- {
- var process:Object = processes[i];
- var checkIngredients:Boolean = checkIngredientData(process, _selectedProductData['ingredients'], true);
- if(checkIngredients)
- {
- //ingredients correct
- addSuccessNotification("Congratulations, your mix is correct!");
- }else
- {
- //ingredients incorrect
- return false;
- }
- }
- return true;
- }else
- {
- return false;
- }
- }
- private function checkProductFreeData():Boolean
- {
- var processes:Array = _processManager.processes;
- processCheck: for(var i:int=0;i<_products.length;i++)
- {
- var product:Object = _products[i];
- var selectedProcesses:Array = product['processes'];
- var checkProcesses:Boolean = checkProcessData(selectedProcesses, processes, false);
- if(checkProcesses)
- {
- //processes are correct
- var matches:int = 0;
- ingredientCheck: for(var j:int=0;j<processes.length;j++)
- {
- var process:Object = processes[j];
- var checkIngredients:Boolean = checkIngredientData(process, product['ingredients'], false);
- if(checkIngredients)
- {
- matches++;
- }
- }
- if(matches === processes.length)
- {
- var classString:String = product['title'].replace(" ", "")..replace(" ", "");
- var productIcon:Sprite = addIcons([classString], "com.assets.structure.primary.products.ui.")[classString];
- addSuccessNotification("Excellent! You have successfully made a dairy product.");
- //dispatch free product made
- dispatchEvent(new ProductEvent("PRODUCT_CREATED", true, false, product['title'], null, productIcon, product));
- _selectedProductData = product;
- return true;
- break processCheck;
- }
- }
- }
- addErrorNotification("Mix does not match any product.");
- return false;
- }
- private function checkProcessData(processes:Array, currentProcesses:Array, useNotifications:Boolean):Boolean
- {
- var matchingProcesses:int = 0;
- if(currentProcesses.length && currentProcesses.length === processes.length)
- {
- //processes exist and number of processes is correct
- productCheck: for(var i:int=0;i<processes.length;i++)
- {
- var currentProcessData:Object = currentProcesses[i];
- var currentProcess:Process = currentProcesses[i]['instance'];
- var process:Object = processes[i];
- if(currentProcessData['name'] !== (process['primarytitle'] + " " + process['subtitle']) && currentProcessData['name'] !== process['title'])
- {
- //wrong process found
- if(useNotifications)
- {
- addErrorNotification("You have selected a process that is not used to make this dairy product.");
- }
- return false;
- break productCheck;
- }
- }
- //process has correct number of processes + order, and has corect number of ingredients + order
- return true;
- }else
- {
- //processes don't exist or incorrect number of processes added
- if(useNotifications)
- {
- addErrorNotification("You have used too many or not enough processes to make this dairy product. Add more processes or clear the screen and try again!");
- }
- return false;
- }
- }
- private function checkIngredientData(currentProcessData:Object, ingredients:Array, useNotifications:Boolean):Boolean
- {
- var currentIngredients:Array = currentProcessData['instance']['ingredients'];
- var dataIngredients:Array = getApplicableIngredients(currentProcessData['name']);
- var processIngredients:Array = getProcessIngredients(dataIngredients, ingredients);
- if(processIngredients.length === currentIngredients.length)
- {
- //correct # of ingredients
- var orderCheck:Boolean = checkIngredientOrder(processIngredients, currentIngredients);
- if(orderCheck)
- {
- //correct ingredients
- }else if(!orderCheck)
- {
- //incorrect ingredients
- if(useNotifications)
- {
- addErrorNotification("You have added an ingredient that is not used to make this dairy product.");
- }
- return false;
- }
- }else if(processIngredients.length !== currentIngredients.length)
- {
- //not enough ingredients
- if(useNotifications)
- {
- addErrorNotification("The dairy product has too many or not enough ingredients. Add more ingredients or take some away.");
- }
- return false;
- }
- return true;
- }
- private function getApplicableIngredients(processName:String):Array
- {
- var temp:Array = [];
- var ingredients:Array = _ingredientList.slice(0);
- for(var i:int=0;i<ingredients.length;i++)
- {
- var ingredient:Object = ingredients[i];
- if(ingredient['process'] === processName)
- {
- temp.push(ingredient);
- }
- ingredient = null;
- }
- ingredients = null;
- return temp;
- }
- private function getProcessIngredients(dataIngredients:Array, ingredients:Array):Array
- {
- var temp:Array = [];
- var i1:Array = dataIngredients.slice(0);
- var i2:Array = ingredients.slice(0);
- dataCheck: for(var i:int=0;i<i1.length;i++)
- {
- var dataIngredient:Object = i1[i];
- titleCheck: for(var j:int=0;j<i2.length;j++)
- {
- var ingredient:Object = i2[j];
- if(dataIngredient['title'] === ingredient['title'])
- {
- temp.push(dataIngredient);
- ingredient = null;
- break titleCheck;
- }
- }
- dataIngredient = null;
- }
- i1 = null, i2 = null;
- return temp;
- }
- private function checkIngredientOrder(ingredients:Array, processIngredients:Array):Boolean
- {
- var i1:Array = ingredients.slice(0);
- var i2:Array = processIngredients.slice(0);
- var temp:Array = [];
- ingredientCheck: for(var i:int=0;i<i1.length;i++)
- {
- var ingredient:Object = i1[i];
- titleCheck: for(var j:int=0;j<i2.length;j++)
- {
- var processIngredient:Object = i2[j];
- if(processIngredient['title'] === ingredient['title'])
- {
- temp.push(ingredient);
- break titleCheck;
- }
- }
- if(temp.length <= i)
- {
- return false;
- break ingredientCheck;
- }
- }
- return true;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement