public bool updateItem(string name, MapItem prev, MapItem next) { if (next == null) { destroyItem(prev.row, prev.column); return(true); } if (prev == null) { createItem(next); return(true); } Tank tank = findByName(name); if (tank == null) { createItem(name, next); return(true); } int moveByRow = tank.row - next.row; int moveByColumn = tank.column - next.column; int rotateBy = 0; int movementDirection; if (moveByColumn != 0 || moveByRow != 0) { if (Mathf.Abs(moveByColumn) > 1 || Mathf.Abs(moveByRow) > 1) { tank.deltas.Add(TankDelta.teleportTo(MapUtils.mapToWorld(next.row, next.column))); } else { movementDirection = getDirectionForMovement(moveByRow, -moveByColumn, rotateBy); tank.deltas.Add(TankDelta.rotateToDirection(movementDirection)); tank.deltas.Add(TankDelta.moveTo(MapUtils.mapToWorld(next.row, next.column))); tank.row = next.row; tank.column = next.column; } } var directionSymbol = canProcess(next.symbol) ? next.symbol : prev.symbol; tank.deltas.Add(TankDelta.rotateToDirection(MapUtils.getTankDirection(directionSymbol))); return(true); }
public void onUpdate(Dictionary <string, MapItem> tanks) { Tank tank; int moveByRow; int moveByColumn; int rotateBy; int movementDirection; foreach (var name in tanks.Keys) { tank = findByName(name); if (tank == null) { createItem(tanks[name].symbol, tanks[name].row, tanks[name].column); return; } moveByRow = tank.row - tanks[name].row; moveByColumn = tank.column - tanks[name].column; rotateBy = 0; if (moveByColumn != 0 || moveByRow != 0) { movementDirection = getDirectionForMovement(moveByRow, moveByColumn, rotateBy); tank.deltas.Add(TankDelta.rotateToDirection(movementDirection)); tank.deltas.Add(TankDelta.moveTo(tank.transform.position + MapUtils.getWorldDelta(moveByRow, moveByColumn))); } tank.deltas.Add(TankDelta.rotateToDirection(getLocalDirection(tanks[name].symbol))); } var tankNames = new List <string>(tanks.Keys); for (var entityId = 0; entityId < _filter.EntitiesCount; entityId++) { tank = _filter.Components1[entityId]; if (tankNames.IndexOf(tank.name) < 0) { removeItem(tank); } } }