mirror of
https://github.com/rvtr/ctr_Repair.git
synced 2025-10-31 13:51:08 -04:00
ネットワーク試遊台用ロゴを使う
とりあえずビルドが通るところまで git-svn-id: file:///Volumes/Transfer/gigaleak_20231201/2020-05-23%20-%20ctr.7z%20+%20svn_v1.068.zip/ctr/svn/ctr_Repair@465 385bec56-5757-e545-9c3a-d8741f4650f1
This commit is contained in:
parent
0bb111714c
commit
b49880c785
@ -17,18 +17,33 @@ CTR_APPTYPE=CARD
|
|||||||
|
|
||||||
SUPPORTED_TARGETS = CTR-T*.Process.MPCore.*
|
SUPPORTED_TARGETS = CTR-T*.Process.MPCore.*
|
||||||
|
|
||||||
SAMPLED_DEMOS_COMMON_INCLUDE_DIR = $(dir $(HORIZON_ROOT)/../CTR/SampleDemos/common/include)
|
INCLUDES += $(NW4C_ROOT)/include
|
||||||
INCLUDES += $(SAMPLED_DEMOS_COMMON_INCLUDE_DIR)
|
|
||||||
|
|
||||||
SOURCES[] =
|
SOURCES[] =
|
||||||
main.cpp
|
main.cpp
|
||||||
scrollBuffer.cpp
|
Drawer.cpp
|
||||||
|
|
||||||
LIBS += lib_demo \
|
LIBS += lib_demo \
|
||||||
libnn_am \
|
libnn_am \
|
||||||
libnn_cup \
|
libnn_cup \
|
||||||
libnn_ns \
|
libnn_ns \
|
||||||
|
|
||||||
|
LIBFILES += $`(addprefix $(NW4C_ROOT)$(DIRSEP)libraries$(DIRSEP)$(config.getTargetSubDirectory true)$(DIRSEP), libnw_demo)
|
||||||
|
LIBFILES += $`(addprefix $(NW4C_ROOT)$(DIRSEP)libraries$(DIRSEP)$(config.getTargetSubDirectory true)$(DIRSEP), libnw_dev)
|
||||||
|
LIBFILES += $`(addprefix $(NW4C_ROOT)$(DIRSEP)libraries$(DIRSEP)$(config.getTargetSubDirectory true)$(DIRSEP), libnw_lyt)
|
||||||
|
LIBFILES += $`(addprefix $(NW4C_ROOT)$(DIRSEP)libraries$(DIRSEP)$(config.getTargetSubDirectory true)$(DIRSEP), libnw_ut)
|
||||||
|
LIBFILES += $`(addprefix $(NW4C_ROOT)$(DIRSEP)libraries$(DIRSEP)$(config.getTargetSubDirectory true)$(DIRSEP), libnw_font)
|
||||||
|
LIBFILES += $`(addprefix $(NW4C_ROOT)$(DIRSEP)libraries$(DIRSEP)$(config.getTargetSubDirectory true)$(DIRSEP), libnw_gfx)
|
||||||
|
LIBFILES += $`(addprefix $(NW4C_ROOT)$(DIRSEP)libraries$(DIRSEP)$(config.getTargetSubDirectory true)$(DIRSEP), libnw_anim)
|
||||||
|
LIBFILES += $`(addprefix $(NW4C_ROOT)$(DIRSEP)libraries$(DIRSEP)$(config.getTargetSubDirectory true)$(DIRSEP), libnw_os)
|
||||||
|
|
||||||
|
ROMFS_ROOT = romfiles
|
||||||
|
ROMFS_FILES[] = All.arc
|
||||||
|
ROMFS_FILES[] +=
|
||||||
|
$(ROMFS_ROOT)/shaders/nwlyt_PaneShader.shbin
|
||||||
|
$(ROMFS_ROOT)/shaders/nwlyt_ConstColorShader.shbin
|
||||||
|
$(ROMFS_ROOT)/shaders/nwfont_TextWriterShader.shbin
|
||||||
|
$(ROMFS_ROOT)/shaders/nwfont_RectDrawerShader.shbin
|
||||||
|
|
||||||
DESCRIPTOR = $(HORIZON_ROOT)/resources/specfiles/SelfCup.desc
|
DESCRIPTOR = $(HORIZON_ROOT)/resources/specfiles/SelfCup.desc
|
||||||
|
|
||||||
@ -39,6 +54,8 @@ ROM_SPEC_FILE = CardCup.rsf
|
|||||||
|
|
||||||
CTR_BANNER_SPEC = $(TARGET_PROGRAM).bsf
|
CTR_BANNER_SPEC = $(TARGET_PROGRAM).bsf
|
||||||
|
|
||||||
include $(ROOT_OMAKE)/modulerules
|
include $(NW4C_ROOT)/build/omake/modulerules
|
||||||
|
|
||||||
build: $(DEFAULT_TARGETS)
|
build: $(DEFAULT_TARGETS)
|
||||||
|
|
||||||
|
DefineDefaultRules()
|
||||||
|
|||||||
@ -30,19 +30,8 @@
|
|||||||
|
|
||||||
#include <nn/cup.h>
|
#include <nn/cup.h>
|
||||||
|
|
||||||
#include "demo.h"
|
|
||||||
#include "scrollBuffer.h"
|
|
||||||
|
|
||||||
namespace
|
namespace
|
||||||
{
|
{
|
||||||
const int s_GxHeapSize=0x800000;
|
|
||||||
nn::fnd::ExpHeap s_appHeap;
|
|
||||||
uptr s_GxHeap;
|
|
||||||
|
|
||||||
demo::RenderSystemDrawing s_RenderSystem;
|
|
||||||
ScrollBuffer s_scrollBufferInstance;
|
|
||||||
ScrollBuffer *s_scrollBuffer;
|
|
||||||
|
|
||||||
char s_updaterBuffer[1<<20] NN_ATTRIBUTE_ALIGN(4096);
|
char s_updaterBuffer[1<<20] NN_ATTRIBUTE_ALIGN(4096);
|
||||||
|
|
||||||
// デモの初期化
|
// デモの初期化
|
||||||
@ -67,52 +56,9 @@ namespace
|
|||||||
nn::fs::Initialize();
|
nn::fs::Initialize();
|
||||||
|
|
||||||
// appletの初期化
|
// appletの初期化
|
||||||
//nn::applet::InitializeForSystem( nn::applet::PHOME_MENU_APPLET_ID, nn::applet::TYPE_SYS );
|
|
||||||
//nn::applet::Initialize( nn::applet::TEST2_APPLET_ID);
|
|
||||||
//nn::applet::SetAppletMode();
|
|
||||||
nn::applet::Enable();
|
nn::applet::Enable();
|
||||||
|
|
||||||
nn::cfg::Initialize();
|
nn::cfg::Initialize();
|
||||||
|
|
||||||
// デバイスメモリの設定
|
|
||||||
const int DEVICE_MEMORY_SIZE = 12*1024 * 1024;
|
|
||||||
NN_UTIL_PANIC_IF_FAILED(nn::os::SetDeviceMemorySize(DEVICE_MEMORY_SIZE));
|
|
||||||
|
|
||||||
// ヒープの初期化
|
|
||||||
s_appHeap.Initialize(nn::os::GetDeviceMemoryAddress(), nn::os::GetDeviceMemorySize(), nn::os::ALLOCATE_OPTION_LINEAR);
|
|
||||||
|
|
||||||
// 描画インスタンスの初期化
|
|
||||||
s_GxHeap = reinterpret_cast<uptr>(s_appHeap.Allocate(s_GxHeapSize));
|
|
||||||
s_RenderSystem.Initialize(s_GxHeap, s_GxHeapSize);
|
|
||||||
|
|
||||||
// 描画インスタンスの初期化
|
|
||||||
s_scrollBufferInstance.Initialize(&s_RenderSystem);
|
|
||||||
s_scrollBuffer=&s_scrollBufferInstance;
|
|
||||||
|
|
||||||
// GPU利用宣言
|
|
||||||
nn::applet::AssignGpuRight();
|
|
||||||
}
|
|
||||||
|
|
||||||
// 消費時間取得用関数群
|
|
||||||
s64 s_StartTick;
|
|
||||||
void SetTick()
|
|
||||||
{
|
|
||||||
s_StartTick=nn::os::Tick::GetSystemCurrent();
|
|
||||||
}
|
|
||||||
s64 GetConsumedMillisec()
|
|
||||||
{
|
|
||||||
s64 endTick=nn::os::Tick::GetSystemCurrent();
|
|
||||||
nn::os::Tick consumed(endTick-s_StartTick);
|
|
||||||
return ((nn::fnd::TimeSpan)consumed).GetMilliSeconds();
|
|
||||||
}
|
|
||||||
|
|
||||||
// 動いていることを知らせるための、くるくる画面表示取得用メソッド
|
|
||||||
const char s_progress[]="-\\|/";
|
|
||||||
int s_progressIndex=0;
|
|
||||||
char GetProgressChar()
|
|
||||||
{
|
|
||||||
s_progressIndex=(s_progressIndex+1)%(sizeof(s_progress)-1);
|
|
||||||
return s_progress[s_progressIndex];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
nn::Result UpdateCore()
|
nn::Result UpdateCore()
|
||||||
@ -121,14 +67,10 @@ namespace
|
|||||||
nn::cup::ProgressInfo info;
|
nn::cup::ProgressInfo info;
|
||||||
|
|
||||||
/********************** アップデート*******************/
|
/********************** アップデート*******************/
|
||||||
SetTick();
|
|
||||||
s_scrollBuffer->AppendText("Start Card Update")->Render();
|
|
||||||
NN_UTIL_RETURN_IF_FAILED(nn::cup::CTR::DoUpdate());
|
NN_UTIL_RETURN_IF_FAILED(nn::cup::CTR::DoUpdate());
|
||||||
|
|
||||||
// ステータスがStartedになるまで、プログレスは取得できない
|
// ステータスがStartedになるまで、プログレスは取得できない
|
||||||
s_scrollBuffer->AppendText("");
|
|
||||||
do{
|
do{
|
||||||
s_scrollBuffer->ReplaceText(" %c Initializing", GetProgressChar())->Render();
|
|
||||||
result = nn::cup::CTR::GetProgressInfo(&info);
|
result = nn::cup::CTR::GetProgressInfo(&info);
|
||||||
NN_UTIL_RETURN_IF_FAILED(result);
|
NN_UTIL_RETURN_IF_FAILED(result);
|
||||||
nn::os::Thread::Sleep(nn::fnd::TimeSpan::FromMilliSeconds(40));
|
nn::os::Thread::Sleep(nn::fnd::TimeSpan::FromMilliSeconds(40));
|
||||||
@ -138,18 +80,11 @@ namespace
|
|||||||
if(info.state==nn::cup::CTR::UPDATE_STATE_FAILED){
|
if(info.state==nn::cup::CTR::UPDATE_STATE_FAILED){
|
||||||
NN_UTIL_RETURN_IF_FAILED(info.lastResult);
|
NN_UTIL_RETURN_IF_FAILED(info.lastResult);
|
||||||
}
|
}
|
||||||
s_scrollBuffer->ReplaceText(" - Initialized (%lldmsec)", GetConsumedMillisec());
|
|
||||||
|
|
||||||
/********************* アップデート中 ******************/
|
/********************* アップデート中 ******************/
|
||||||
SetTick();
|
|
||||||
s_scrollBuffer->AppendText("")->Render();
|
|
||||||
do{
|
do{
|
||||||
result = nn::cup::CTR::GetProgressInfo(&info);
|
result = nn::cup::CTR::GetProgressInfo(&info);
|
||||||
NN_UTIL_RETURN_IF_FAILED(result);
|
NN_UTIL_RETURN_IF_FAILED(result);
|
||||||
s_scrollBuffer->ReplaceText(" %c Title %d/%d, size %lld/%lld",
|
|
||||||
GetProgressChar(),
|
|
||||||
info.numImportedTitles, info.numTotalTitles,
|
|
||||||
info.importedSize, info.totalSize)->Render();
|
|
||||||
nn::os::Thread::Sleep(nn::fnd::TimeSpan::FromMilliSeconds(40));
|
nn::os::Thread::Sleep(nn::fnd::TimeSpan::FromMilliSeconds(40));
|
||||||
|
|
||||||
}while(info.state==nn::cup::CTR::UPDATE_STATE_STARTED);
|
}while(info.state==nn::cup::CTR::UPDATE_STATE_STARTED);
|
||||||
@ -157,15 +92,11 @@ namespace
|
|||||||
if(info.state==nn::cup::CTR::UPDATE_STATE_FAILED){
|
if(info.state==nn::cup::CTR::UPDATE_STATE_FAILED){
|
||||||
NN_UTIL_RETURN_IF_FAILED(info.lastResult);
|
NN_UTIL_RETURN_IF_FAILED(info.lastResult);
|
||||||
}
|
}
|
||||||
s_scrollBuffer->AppendText(" - Imported (%lldmsec)", GetConsumedMillisec())->Render();
|
|
||||||
|
|
||||||
/***************** アップデート終了中 ******************/
|
/***************** アップデート終了中 ******************/
|
||||||
SetTick();
|
|
||||||
s_scrollBuffer->AppendText("")->Render();
|
|
||||||
do{
|
do{
|
||||||
result = nn::cup::CTR::GetProgressInfo(&info);
|
result = nn::cup::CTR::GetProgressInfo(&info);
|
||||||
NN_UTIL_RETURN_IF_FAILED(result);
|
NN_UTIL_RETURN_IF_FAILED(result);
|
||||||
s_scrollBuffer->ReplaceText(" %c Update Finalizing", GetProgressChar())->Render();
|
|
||||||
nn::os::Thread::Sleep(nn::fnd::TimeSpan::FromMilliSeconds(40));
|
nn::os::Thread::Sleep(nn::fnd::TimeSpan::FromMilliSeconds(40));
|
||||||
}while(info.state==nn::cup::CTR::UPDATE_STATE_FINALIZING);
|
}while(info.state==nn::cup::CTR::UPDATE_STATE_FINALIZING);
|
||||||
// 抜けた際のstateがFAILEDかどうか確認
|
// 抜けた際のstateがFAILEDかどうか確認
|
||||||
@ -174,8 +105,6 @@ namespace
|
|||||||
}
|
}
|
||||||
|
|
||||||
/******************* アップデート終了 *******************/
|
/******************* アップデート終了 *******************/
|
||||||
s_scrollBuffer->AppendText(" - Finalized (%lldmsec)", GetConsumedMillisec())->Render();
|
|
||||||
s_scrollBuffer->AppendText("");
|
|
||||||
|
|
||||||
return nn::ResultSuccess();
|
return nn::ResultSuccess();
|
||||||
}
|
}
|
||||||
@ -186,40 +115,25 @@ namespace
|
|||||||
nn::Result lastResult=nn::ResultSuccess();
|
nn::Result lastResult=nn::ResultSuccess();
|
||||||
|
|
||||||
/********************* CUPの初期化 *******************/
|
/********************* CUPの初期化 *******************/
|
||||||
s_scrollBuffer->AppendText("Initializing Cup Library")->Render();
|
|
||||||
SetTick(); // 初期化開始前の時間をセット
|
|
||||||
result=nn::cup::CTR::Initialize(s_updaterBuffer,sizeof(s_updaterBuffer));
|
result=nn::cup::CTR::Initialize(s_updaterBuffer,sizeof(s_updaterBuffer));
|
||||||
if(result==nn::cup::CTR::ResultUpdatePartitionNotFound()){
|
if(result==nn::cup::CTR::ResultUpdatePartitionNotFound()){
|
||||||
s_scrollBuffer->AppendText(" - Update Partition Not Found (%lldmsec)", GetConsumedMillisec())->Render();
|
|
||||||
s_scrollBuffer->AppendText("")->Render();
|
|
||||||
*isHandledError=true;
|
*isHandledError=true;
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
if(result==nn::cup::CTR::ResultUpdateNotRequired()){
|
if(result==nn::cup::CTR::ResultUpdateNotRequired()){
|
||||||
s_scrollBuffer->AppendText(" - Already Updated (%lldmsec)", GetConsumedMillisec())->Render();
|
|
||||||
s_scrollBuffer->AppendText("")->Render();
|
|
||||||
*isHandledError=true;
|
*isHandledError=true;
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
if(result==nn::cup::CTR::ResultInvalidUpdatePartitionFormat()){
|
if(result==nn::cup::CTR::ResultInvalidUpdatePartitionFormat()){
|
||||||
s_scrollBuffer->AppendText(" - Invalid Update Partition (%lldmsec)", GetConsumedMillisec())->Render();
|
|
||||||
s_scrollBuffer->AppendText("")->Render();
|
|
||||||
*isHandledError=true;
|
*isHandledError=true;
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
NN_UTIL_RETURN_IF_FAILED(result);
|
NN_UTIL_RETURN_IF_FAILED(result);
|
||||||
|
|
||||||
s_scrollBuffer->AppendText(" - Need Update (%lldmsec)", GetConsumedMillisec())->Render();
|
|
||||||
s_scrollBuffer->AppendText("")->Render();
|
|
||||||
|
|
||||||
lastResult=UpdateCore();
|
lastResult=UpdateCore();
|
||||||
|
|
||||||
// Initializeに成功した場合のみ、再びInitializeするためにFinalizeが必要
|
// Initializeに成功した場合のみ、再びInitializeするためにFinalizeが必要
|
||||||
SetTick();
|
|
||||||
s_scrollBuffer->AppendText("Finalizing Cup Library")->Render();
|
|
||||||
NN_UTIL_RETURN_IF_FAILED(nn::cup::CTR::Finalize());
|
NN_UTIL_RETURN_IF_FAILED(nn::cup::CTR::Finalize());
|
||||||
s_scrollBuffer->AppendText(" - Complete (%lldmsec)", GetConsumedMillisec())->Render();
|
|
||||||
s_scrollBuffer->AppendText("")->Render();
|
|
||||||
|
|
||||||
return lastResult;
|
return lastResult;
|
||||||
}
|
}
|
||||||
@ -256,31 +170,25 @@ extern "C" void nnMain()
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
nn::am::ProgramInfo outInfos;
|
nn::am::ProgramInfo outInfos;
|
||||||
result = nn::am::GetProgramInfos(&outInfos, nn::fs::MEDIA_TYPE_NAND, &MMEN_PROGRAM_ID, 1);
|
result = nn::am::GetProgramInfos(&outInfos, nn::fs::MEDIA_TYPE_NAND, &MMEN_PROGRAM_ID, 1);
|
||||||
if (result.IsSuccess())
|
if (result.IsSuccess())
|
||||||
{
|
{
|
||||||
|
|
||||||
/******************** CUPの実行 *******************/
|
/******************** CUPの実行 *******************/
|
||||||
bool isHandledError = false;
|
bool isHandledError = false;
|
||||||
result = UpdateSequence(&isHandledError);
|
result = UpdateSequence(&isHandledError);
|
||||||
if (isHandledError == false && result.IsFailure())
|
if (isHandledError == false && result.IsFailure())
|
||||||
{
|
{
|
||||||
{
|
{
|
||||||
// それ以外の場合は、Resultを表示
|
// TODO:それ以外の場合は、エラーアプレットを表示
|
||||||
s_scrollBuffer->AppendText(" - Unhandled Error: 0x%08x", result.GetPrintableBits());
|
|
||||||
s_scrollBuffer->AppendText("")->Render();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if(result == nn::am::ResultNotFound())
|
else if(result == nn::am::ResultNotFound())
|
||||||
{
|
{
|
||||||
s_scrollBuffer->AppendText("Cannot find Home Menu");
|
// TODO:HOMEメニューが無いエラーをエラーアプレットで表示する
|
||||||
}
|
}
|
||||||
|
|
||||||
s_scrollBuffer->AppendText("")->Render();
|
|
||||||
|
|
||||||
nn::os::Tick before = nn::os::Tick::GetSystemCurrent();
|
nn::os::Tick before = nn::os::Tick::GetSystemCurrent();
|
||||||
const u8 SHUTDOWN_WAIT_SECONDS = 2;
|
const u8 SHUTDOWN_WAIT_SECONDS = 2;
|
||||||
for(;;)
|
for(;;)
|
||||||
@ -291,27 +199,16 @@ extern "C" void nnMain()
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
s_RenderSystem.SetRenderTarget(NN_GX_DISPLAY0);
|
// 画面描画
|
||||||
if(result.IsSuccess() || result == nn::cup::CTR::ResultUpdateNotRequired())
|
if(result.IsSuccess() || result == nn::cup::CTR::ResultUpdateNotRequired())
|
||||||
{
|
{
|
||||||
s_RenderSystem.SetClearColor(NN_GX_DISPLAY0, 0, 1, 0, 1);
|
// TODO:成功したので終了処理に入る
|
||||||
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
s_RenderSystem.SetClearColor(NN_GX_DISPLAY0, 1, 0, 0, 1);
|
// TODO:失敗したのでエラー表示を続ける
|
||||||
}
|
}
|
||||||
s_RenderSystem.Clear();
|
|
||||||
s_RenderSystem.SwapBuffers();
|
|
||||||
s_RenderSystem.SetRenderTarget(NN_GX_DISPLAY1);
|
|
||||||
if(result.IsSuccess() || result == nn::cup::CTR::ResultUpdateNotRequired())
|
|
||||||
{
|
|
||||||
s_RenderSystem.SetClearColor(NN_GX_DISPLAY1, 0, 1, 0, 1);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
s_RenderSystem.SetClearColor(NN_GX_DISPLAY1, 1, 0, 0, 1);
|
|
||||||
}
|
|
||||||
s_scrollBuffer->ReplaceText("%c Finished", GetProgressChar())->Render();
|
|
||||||
|
|
||||||
if ( nn::applet::IsExpectedToCloseApplication() )
|
if ( nn::applet::IsExpectedToCloseApplication() )
|
||||||
{
|
{
|
||||||
|
|||||||
BIN
branches/CardCupForNBD/CardCup/romfiles/All.arc
Normal file
BIN
branches/CardCupForNBD/CardCup/romfiles/All.arc
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -1,89 +0,0 @@
|
|||||||
/*---------------------------------------------------------------------------*
|
|
||||||
Project: Horizon
|
|
||||||
File: scrollBuffer.cpp
|
|
||||||
|
|
||||||
Copyright (C)2009 Nintendo Co., Ltd. All rights reserved.
|
|
||||||
|
|
||||||
These coded instructions, statements, and computer programs contain
|
|
||||||
proprietary information of Nintendo of America Inc. and/or Nintendo
|
|
||||||
Company Ltd., and are protected by Federal copyright law. They may
|
|
||||||
not be disclosed to third parties or copied or duplicated in any form,
|
|
||||||
in whole or in part, without the prior written consent of Nintendo.
|
|
||||||
|
|
||||||
$Rev$
|
|
||||||
*---------------------------------------------------------------------------*/
|
|
||||||
|
|
||||||
#include <cstdio>
|
|
||||||
#include "scrollBuffer.h"
|
|
||||||
|
|
||||||
using namespace std;
|
|
||||||
|
|
||||||
char ScrollBuffer::s_buffers[MAX_BUFFER_LINE][MAX_BUFFER_CHARS];
|
|
||||||
|
|
||||||
char *ScrollBuffer::GetFormattedString(const char *fmt, va_list arg)
|
|
||||||
{
|
|
||||||
static char formattedBuffer[MAX_BUFFER_CHARS];
|
|
||||||
vsnprintf(formattedBuffer, MAX_BUFFER_CHARS, fmt, arg);
|
|
||||||
return formattedBuffer;
|
|
||||||
}
|
|
||||||
|
|
||||||
ScrollBuffer *ScrollBuffer::Update()
|
|
||||||
{
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
ScrollBuffer *ScrollBuffer::AppendText(const char *fmt, ...)
|
|
||||||
{
|
|
||||||
va_list vlist;
|
|
||||||
va_start(vlist, fmt);
|
|
||||||
|
|
||||||
int nextPosition=(m_tail+1)%MAX_BUFFER_LINE;
|
|
||||||
if(nextPosition==m_head){
|
|
||||||
// ヘッドとビューの移動
|
|
||||||
if(m_head==m_currentView){
|
|
||||||
m_currentView=(m_head+1)%MAX_BUFFER_LINE;
|
|
||||||
}
|
|
||||||
m_head=(m_head+1)%MAX_BUFFER_LINE;
|
|
||||||
|
|
||||||
}
|
|
||||||
strlcpy(s_buffers[m_tail], GetFormattedString(fmt, vlist), MAX_BUFFER_CHARS);
|
|
||||||
m_tail=nextPosition;
|
|
||||||
NN_LOG("cup: %s\n", GetFormattedString(fmt, vlist));
|
|
||||||
|
|
||||||
// ビューの移動
|
|
||||||
if((m_currentView+MAX_DISPLAY_LINES)%MAX_BUFFER_LINE==m_tail){
|
|
||||||
m_currentView=(m_currentView+1)%MAX_BUFFER_LINE;
|
|
||||||
}
|
|
||||||
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
ScrollBuffer *ScrollBuffer::ReplaceText(const char *fmt, ...)
|
|
||||||
{
|
|
||||||
va_list vlist;
|
|
||||||
va_start(vlist, fmt);
|
|
||||||
|
|
||||||
NN_ASSERT(m_tail!=m_head);
|
|
||||||
strlcpy(s_buffers[(m_tail-1)%MAX_BUFFER_LINE], GetFormattedString(fmt, vlist), MAX_BUFFER_CHARS);
|
|
||||||
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
void ScrollBuffer::Render()
|
|
||||||
{
|
|
||||||
// 描画前処理
|
|
||||||
m_render->SetRenderTarget(NN_GX_DISPLAY1);
|
|
||||||
m_render->Clear();
|
|
||||||
m_render->SetColor(1.0f, 1.0f, 1.0f, 1.0f);
|
|
||||||
|
|
||||||
// リングバッファなので、終端条件を調整
|
|
||||||
int tail=(m_tail<m_head) ? m_tail+ScrollBuffer::MAX_BUFFER_LINE : m_tail;
|
|
||||||
|
|
||||||
for(int i=m_currentView; i<tail; i++){
|
|
||||||
if(i<m_currentView+MAX_DISPLAY_LINES-1){
|
|
||||||
m_render->DrawText(0, (i-m_currentView)*FONT_SIZE, s_buffers[i%MAX_BUFFER_LINE]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// 描画転送
|
|
||||||
m_render->SwapBuffers();
|
|
||||||
}
|
|
||||||
@ -1,55 +0,0 @@
|
|||||||
/*---------------------------------------------------------------------------*
|
|
||||||
Project: Horizon
|
|
||||||
File: scrollBuffer.h
|
|
||||||
|
|
||||||
Copyright (C)2009 Nintendo Co., Ltd. All rights reserved.
|
|
||||||
|
|
||||||
These coded instructions, statements, and computer programs contain
|
|
||||||
proprietary information of Nintendo of America Inc. and/or Nintendo
|
|
||||||
Company Ltd., and are protected by Federal copyright law. They may
|
|
||||||
not be disclosed to third parties or copied or duplicated in any form,
|
|
||||||
in whole or in part, without the prior written consent of Nintendo.
|
|
||||||
|
|
||||||
$Rev$
|
|
||||||
*---------------------------------------------------------------------------*/
|
|
||||||
|
|
||||||
#ifndef SCROLL_BUFFER_H_
|
|
||||||
#define SCROLL_BUFFER_H_
|
|
||||||
|
|
||||||
#include "demo.h"
|
|
||||||
class ScrollBuffer
|
|
||||||
{
|
|
||||||
private:
|
|
||||||
enum
|
|
||||||
{
|
|
||||||
MAX_BUFFER_LINE=128,
|
|
||||||
MAX_BUFFER_CHARS=80,
|
|
||||||
MAX_DISPLAY_LINES=20,
|
|
||||||
FONT_SIZE=12
|
|
||||||
};
|
|
||||||
// 表示文字のバッファ (リングバッファ)
|
|
||||||
static char s_buffers[MAX_BUFFER_LINE][MAX_BUFFER_CHARS];
|
|
||||||
int m_head;
|
|
||||||
int m_tail;
|
|
||||||
int m_currentView;
|
|
||||||
|
|
||||||
demo::RenderSystemDrawing *m_render;
|
|
||||||
|
|
||||||
char *GetFormattedString(const char *fmt, va_list arg);
|
|
||||||
|
|
||||||
public:
|
|
||||||
ScrollBuffer() :
|
|
||||||
m_head(0), m_tail(0), m_currentView(0)
|
|
||||||
{}
|
|
||||||
void Initialize(demo::RenderSystemDrawing *render)
|
|
||||||
{
|
|
||||||
m_render=render;
|
|
||||||
}
|
|
||||||
|
|
||||||
ScrollBuffer *Update(); // キー入力を参照して、スクロールする
|
|
||||||
ScrollBuffer *AppendText(const char *fmt, ...); // 文字列を追加する
|
|
||||||
ScrollBuffer *ReplaceText(const char *fmt, ...); // 最新の文字列を置換する
|
|
||||||
void Render(); // レンダリング
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif // SCROLL_BUFFER_H
|
|
||||||
Loading…
Reference in New Issue
Block a user