ECSey LOOP NORMALISATION

develop
Nathan Steel 1 year ago
parent 96d21acc57
commit f209af082b

@ -439,6 +439,114 @@ class Board{
} }
// boardElement, cardData?, position?, size?, cardStatus, player, listPosition
ECSLoop(boardElementId = null, playerId = null, cardStatusId = null, listPositionId = null){
// So, the intent here is to normalise my nested loop I keep duping (parts of)
// This will recieve each piece of content that can be stored in each ECS element
// Then will loop each individually, setting a new array to be returned
// This new array will then be used for tapping, untapping, moving positions, etc.
// This is the 'core' of the loop, as it'll keep changing what's in it, removing
// elements at each step. I.e. Will check boardElement for 'mana', removing all other boardElements
// Then with just the 'mana' elements will check the player. OR can return all mana, OR all player items
let newItems = [];
let tempArray = [];
// Set to all items in itemArray to start
newItems = item;
//let elements = ['deck','board','hand','mana','shield', 'grave'];
// Stuff to be looped, and compared
//let boardElement = {};
//let cardData = {};
//let position = {};
//let size = {};
//let cardStatus = {}; // tapped, attacking, inspected, untargettable (TODO:maybe used this instead of inEvent later)
//let player = {};
//let listPosition = {};
// These have been re-ordered to try to minise looping
// Example, player in theory halfs the cards instantly, whereas boardElement deck, may do little
// boardElement often will be better though, but???
// PLAYER
if(playerId !== null){
for(let newItem = 0; newItem < newItems.length; newItem++){
let itemKey = newItems[newItem];
// If the playerId of item shares the passed playerId
if(playerId == player[itemKey]){
tempArray.push(newItems[newItem]);
}
}
// Set newItems to what remains in tempArray
newItems = tempArray;
}
// Reset tempArray so it can be reused
tempArray = [];
// CARD STATUS
if(cardStatusId !== null){
for(let newItem = 0; newItem < newItems.length; newItem++){
let itemKey = newItems[newItem];
// If the playerId of item shares the passed playerId
if(cardStatusId == cardStatus[itemKey]){
tempArray.push(newItems[newItem]);
}
}
// Set newItems to what remains in tempArray
newItems = tempArray;
}
// Reset tempArray so it can be reused
tempArray = [];
// LIST POSITION
if(listPositionId !== null){
for(let newItem = 0; newItem < newItems.length; newItem++){
let itemKey = newItems[newItem];
// If the playerId of item shares the passed playerId
if(listPositionId == listPosition[itemKey]){
tempArray.push(newItems[newItem]);
}
}
// Set newItems to what remains in tempArray
newItems = tempArray;
}
// Reset tempArray so it can be reused
tempArray = [];
// BOARD ELEMENT
// Loop items for boardElement of elementType passed
// Only do the loop if the element type was passed too, no reason to waste resources
if(boardElementId !== null){
for(let newItem = 0; newItem < newItems.length; newItem++){
// Add the itemKey to tempArray
// itemKey can be different to the array's elementId, and we want the original itemKey,
// not the new elementId, as that would then add the wrong item
// Set the itemKey, so things make sense
let itemKey = newItems[newItem]; //newItems[0] could be itemKey 12, so want the content
// If the boardElement of item shares the passed boardElement add it to current return
if(boardElementId == boardElement[itemKey]){
tempArray.push(newItems[newItem]);
}
}
// Set newItems to what remains in tempArray
newItems = tempArray;
}
// Reset tempArray so it can be reused
tempArray = [];
return newItems;
// TODO: May look at restructuring this again. Maybe one loop with each check against
// the element data passed. Depends on which seems fastest, may do a compare on a large
// dataset to see
// TODO: ALSO in different func, Something like x.element.player.status to return the itemKey?
}
addFromBoardElement(playerFrom, fromPosition, elementFrom, elementTo, toPosition=null, playerTo=null){ addFromBoardElement(playerFrom, fromPosition, elementFrom, elementTo, toPosition=null, playerTo=null){
// Move itemKey fromPosition in elementFrom to toPosition in elementTo // Move itemKey fromPosition in elementFrom to toPosition in elementTo
// can also switch item between players (of from and to supplied) // can also switch item between players (of from and to supplied)
@ -607,6 +715,7 @@ class Board{
this.drawBoard(); this.drawBoard();
} }
inspectCard(cardToInspect){ inspectCard(cardToInspect){
// Set inspectedCard (for now) to the card itemKey // Set inspectedCard (for now) to the card itemKey
inEvent = ['inspect', cardToInspect]; inEvent = ['inspect', cardToInspect];
@ -1247,4 +1356,15 @@ function calculateItemSizePosition(itemKey){
position[itemKey] = [positionX,positionY]; position[itemKey] = [positionX,positionY];
} }
function ECSLoopTest(){
// boardElement, player, cardStatus, listPosition
// TODO: ?cardData?, position?, size?
let boardElementId = 'board';
let playerId = 0;
let cardStatusId = null;
let listPositionId = null;
let items = board.ECSLoop(boardElementId, playerId, cardStatusId, listPositionId);
console.log('Items in boardElement: '+boardElementId+' player: '+playerId+' cardStatus: '+cardStatusId+' listPosition: '+listPositionId);
console.log(items);
}

Loading…
Cancel
Save