Skip to content

Commit

Permalink
introduce templated CvoltonListView
Browse files Browse the repository at this point in the history
  • Loading branch information
Cvolton committed Dec 16, 2023
1 parent 590fce3 commit c57463a
Show file tree
Hide file tree
Showing 14 changed files with 172 additions and 221 deletions.
3 changes: 2 additions & 1 deletion src/layers/DailyHistory/DailyCell.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,8 @@
#include "../../utils.hpp"
#include "../../managers/BetterInfoCache.h"

void DailyCell::loadFromLevel(GJGameLevel* level) {
void DailyCell::loadFromData(CCObject* object) {
auto level = static_cast<GJGameLevel*>(object);
this->m_level = level;

auto biCache = BetterInfoCache::sharedState();
Expand Down
2 changes: 1 addition & 1 deletion src/layers/DailyHistory/DailyCell.h
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,6 @@ class DailyCell : public GenericListCell {

public:
DailyCell(const char* name, cocos2d::CCSize size);
void loadFromLevel(GJGameLevel* level);
void loadFromData(CCObject* object);
static DailyCell* create(const char* key, cocos2d::CCSize size);
};
39 changes: 0 additions & 39 deletions src/layers/DailyHistory/DailyListView.cpp

This file was deleted.

13 changes: 0 additions & 13 deletions src/layers/DailyHistory/DailyListView.h

This file was deleted.

83 changes: 41 additions & 42 deletions src/layers/DailyHistory/DailyViewLayer.cpp
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
#include "DailyViewLayer.h"
#include "DailyListView.h"
#include "../JumpToPageLayer.h"
#include "../../utils.hpp"

Expand All @@ -21,7 +20,7 @@ bool DailyViewLayer::compareDailies(const void* l1, const void* l2){
}

bool DailyViewLayer::init(bool isWeekly) {
this->isWeekly = isWeekly;
m_isWeekly = isWeekly;

auto GLM = GameLevelManager::sharedState();
auto winSize = CCDirector::sharedDirector()->getWinSize();
Expand Down Expand Up @@ -51,44 +50,44 @@ bool DailyViewLayer::init(bool isWeekly) {
setKeypadEnabled(true);

auto dailyLevels = GLM->m_dailyLevels;
sortedLevels = CCArray::create();
sortedLevels->retain();
m_sortedLevels = CCArray::create();
m_sortedLevels->retain();
CCDictElement* obj;
CCDICT_FOREACH(dailyLevels, obj){
auto currentLvl = static_cast<GJGameLevel*>(obj->getObject());
if(
currentLvl != nullptr &&
((isWeekly && currentLvl->m_dailyID >= 100000) || (!isWeekly && currentLvl->m_dailyID < 100000))
){
sortedLevels->addObject(currentLvl);
m_sortedLevels->addObject(currentLvl);
}
}
std::sort(sortedLevels->data->arr, sortedLevels->data->arr + sortedLevels->data->num, DailyViewLayer::compareDailies);
std::sort(m_sortedLevels->data->arr, m_sortedLevels->data->arr + m_sortedLevels->data->num, DailyViewLayer::compareDailies);

auto prevSprite = CCSprite::createWithSpriteFrameName(controllerConnected ? "controllerBtn_DPad_Left_001.png" : "GJ_arrow_03_001.png");
prevBtn = CCMenuItemSpriteExtra::create(
m_prevBtn = CCMenuItemSpriteExtra::create(
prevSprite,
this,
menu_selector(DailyViewLayer::onPrev)
);
prevBtn->setPosition({- (winSize.width / 2) + 25, 0});
menu->addChild(prevBtn);
m_prevBtn->setPosition({- (winSize.width / 2) + 25, 0});
menu->addChild(m_prevBtn);

auto nextSprite = CCSprite::createWithSpriteFrameName(controllerConnected ? "controllerBtn_DPad_Right_001.png" : "GJ_arrow_03_001.png");
if(!controllerConnected) nextSprite->setFlipX(true);
nextBtn = CCMenuItemSpriteExtra::create(
m_nextBtn = CCMenuItemSpriteExtra::create(
nextSprite,
this,
menu_selector(DailyViewLayer::onNext)
);
nextBtn->setPosition({+ (winSize.width / 2) - 25, 0});
menu->addChild(nextBtn);
m_nextBtn->setPosition({+ (winSize.width / 2) - 25, 0});
menu->addChild(m_nextBtn);

counter = CCLabelBMFont::create("0 to 0 of 0", "goldFont.fnt");
counter->setAnchorPoint({ 1.f, 1.f });
counter->setPosition(winSize - CCPoint(7,3));
counter->setScale(0.5f);
addChild(counter);
m_counter = CCLabelBMFont::create("0 to 0 of 0", "goldFont.fnt");
m_counter->setAnchorPoint({ 1.f, 1.f });
m_counter->setPosition(winSize - CCPoint(7,3));
m_counter->setScale(0.5f);
addChild(m_counter);

//corners
auto cornerBL = CCSprite::createWithSpriteFrameName("GJ_sideArt_001.png");
Expand All @@ -103,10 +102,10 @@ bool DailyViewLayer::init(bool isWeekly) {
addChild(cornerBR, -1);

//navigation buttons
pageBtnSprite = ButtonSprite::create("1", 23, true, "bigFont.fnt", "GJ_button_02.png", 40, .7f);
pageBtnSprite->setScale(0.7f);
m_pageBtnSprite = ButtonSprite::create("1", 23, true, "bigFont.fnt", "GJ_button_02.png", 40, .7f);
m_pageBtnSprite->setScale(0.7f);
auto pageBtn = CCMenuItemSpriteExtra::create(
pageBtnSprite,
m_pageBtnSprite,
this,
menu_selector(DailyViewLayer::onJumpToPageLayer)
);
Expand Down Expand Up @@ -143,42 +142,42 @@ void DailyViewLayer::loadPage(unsigned int page){

auto winSize = CCDirector::sharedDirector()->getWinSize();

if(listLayer != nullptr) listLayer->removeFromParentAndCleanup(true);
if(m_listLayer != nullptr) m_listLayer->removeFromParentAndCleanup(true);

this->page = page;
m_page = page;
CCArray* displayedLevels = CCArray::create();
//TODO: can we clone this by passing an iterator or something like that
const unsigned int levelCount = levelsPerPage();
unsigned int firstIndex = page * levelCount;
unsigned int lastIndex = (page+1) * levelCount;

for(unsigned int i = firstIndex; i < lastIndex; i++){
auto levelObject = sortedLevels->objectAtIndex(i);
if(i >= sortedLevels->count() || levelObject == nullptr) break;
auto levelObject = m_sortedLevels->objectAtIndex(i);
if(i >= m_sortedLevels->count() || levelObject == nullptr) break;

displayedLevels->addObject(levelObject);
}

dailyView = DailyListView::create(displayedLevels, 356.f, 220.f);
listLayer = GJListLayer::create(dailyView, isWeekly ? "Weekly Demons" : "Daily Levels", {191, 114, 62, 255}, 356.f, 220.f);
listLayer->setPosition(winSize / 2 - listLayer->getScaledContentSize() / 2 - CCPoint(0,5));
addChild(listLayer);
auto listView = CvoltonListView<DailyCell>::create(displayedLevels, 356.f, 220.f);
m_listLayer = GJListLayer::create(listView, m_isWeekly ? "Weekly Demons" : "Daily Levels", {191, 114, 62, 255}, 356.f, 220.f);
m_listLayer->setPosition(winSize / 2 - m_listLayer->getScaledContentSize() / 2 - CCPoint(0,5));
addChild(m_listLayer);

if(page == 0) prevBtn->setVisible(false);
else prevBtn->setVisible(true);
if(page == 0) m_prevBtn->setVisible(false);
else m_prevBtn->setVisible(true);

if(sortedLevels->count() > lastIndex) nextBtn->setVisible(true);
else nextBtn->setVisible(false);
if(m_sortedLevels->count() > lastIndex) m_nextBtn->setVisible(true);
else m_nextBtn->setVisible(false);

pageBtnSprite->setString(std::to_string(page+1).c_str());
m_pageBtnSprite->setString(std::to_string(page+1).c_str());

counter->setCString(CCString::createWithFormat("%i to %i of %i", firstIndex+1, (sortedLevels->count() >= lastIndex) ? lastIndex : sortedLevels->count(), sortedLevels->count())->getCString());
m_counter->setCString(CCString::createWithFormat("%i to %i of %i", firstIndex+1, (m_sortedLevels->count() >= lastIndex) ? lastIndex : m_sortedLevels->count(), m_sortedLevels->count())->getCString());
}

void DailyViewLayer::keyBackClicked() {
setTouchEnabled(false);
setKeypadEnabled(false);
sortedLevels->release();
m_sortedLevels->release();
CCDirector::sharedDirector()->popSceneWithTransition(0.5f, PopTransition::kPopTransitionFade);
}

Expand All @@ -188,23 +187,23 @@ void DailyViewLayer::onBack(CCObject* object) {
}

void DailyViewLayer::onPrev(CCObject* object) {
loadPage(--page);
loadPage(--m_page);
}

void DailyViewLayer::onNext(CCObject* object) {
loadPage(++page);
loadPage(++m_page);
}

void DailyViewLayer::onJumpToPageLayer(CCObject* sender){
JumpToPageLayer::create(this)->show();
}

void DailyViewLayer::onRandom(CCObject* sender){
loadPage(BetterInfo::randomNumber(0, sortedLevels->count() / levelsPerPage()));
loadPage(BetterInfo::randomNumber(0, m_sortedLevels->count() / levelsPerPage()));
}

void DailyViewLayer::onMore(CCObject* object) {
auto searchObject = GJSearchObject::create(isWeekly ? SearchType::WeeklyVault : SearchType::DailyVault);
auto searchObject = GJSearchObject::create(m_isWeekly ? SearchType::WeeklyVault : SearchType::DailyVault);
auto browserLayer = LevelBrowserLayer::scene(searchObject);

auto transitionFade = CCTransitionFade::create(0.5, browserLayer);
Expand All @@ -220,7 +219,7 @@ CCScene* DailyViewLayer::scene(bool isWeekly) {
}

int DailyViewLayer::getPage() const{
return page;
return m_page;
}

int DailyViewLayer::levelsPerPage() const{
Expand All @@ -231,11 +230,11 @@ void DailyViewLayer::keyDown(enumKeyCodes key){
switch(key){
case KEY_Left:
case CONTROLLER_Left:
if(prevBtn->isVisible() == true) onPrev(nullptr);
if(m_prevBtn->isVisible() == true) onPrev(nullptr);
break;
case KEY_Right:
case CONTROLLER_Right:
if(nextBtn->isVisible() == true) onNext(nullptr);
if(m_nextBtn->isVisible() == true) onNext(nullptr);
break;
default:
CCLayer::keyDown(key);
Expand Down
20 changes: 10 additions & 10 deletions src/layers/DailyHistory/DailyViewLayer.h
Original file line number Diff line number Diff line change
@@ -1,18 +1,18 @@
#pragma once

#include "DailyListView.h"
#include "../_bases/CvoltonListView.h"
#include "DailyCell.h"
#include "../../delegates/PageNumberDelegate.h"

class DailyViewLayer : public cocos2d::CCLayer, public PageNumberDelegate {
DailyListView* dailyView = nullptr;
GJListLayer* listLayer = nullptr;
cocos2d::CCArray* sortedLevels = nullptr;
CCMenuItemSpriteExtra* prevBtn = nullptr;
CCMenuItemSpriteExtra* nextBtn = nullptr;
cocos2d::CCLabelBMFont* counter = nullptr;
ButtonSprite* pageBtnSprite = nullptr;
unsigned int page = 0;
bool isWeekly = false;
GJListLayer* m_listLayer = nullptr;
cocos2d::CCArray* m_sortedLevels = nullptr;
CCMenuItemSpriteExtra* m_prevBtn = nullptr;
CCMenuItemSpriteExtra* m_nextBtn = nullptr;
cocos2d::CCLabelBMFont* m_counter = nullptr;
ButtonSprite* m_pageBtnSprite = nullptr;
unsigned int m_page = 0;
bool m_isWeekly = false;
protected:
virtual bool init(bool isWeekly);
virtual void keyBackClicked();
Expand Down
4 changes: 3 additions & 1 deletion src/layers/RewardHistory/RewardCell.cpp
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
#include "RewardCell.h"
#include "../utils.hpp"

void RewardCell::loadFromReward(GJRewardItem* reward) {
void RewardCell::loadFromData(CCObject* object) {
auto reward = static_cast<GJRewardItem*>(object);

const float rowX = 48.f;
const float rowY = 10.5f;

Expand Down
2 changes: 1 addition & 1 deletion src/layers/RewardHistory/RewardCell.h
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,6 @@ class RewardCell : public GenericListCell {

public:
RewardCell(const char* name, cocos2d::CCSize size);
void loadFromReward(GJRewardItem* reward);
void loadFromData(CCObject* object);
static RewardCell* create(const char* key, cocos2d::CCSize size);
};
39 changes: 0 additions & 39 deletions src/layers/RewardHistory/RewardListView.cpp

This file was deleted.

13 changes: 0 additions & 13 deletions src/layers/RewardHistory/RewardListView.h

This file was deleted.

Loading

0 comments on commit c57463a

Please sign in to comment.