Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
20 commits
Select commit Hold shift + click to select a range
7f136b6
_uint32_tの定義を改善
kagematya Nov 3, 2016
1a8e9ac
CellCacheを分離
kagematya Nov 3, 2016
e5f137d
AnimCache分離
kagematya Nov 3, 2016
f4b67ef
EffectCacheを分離
kagematya Nov 3, 2016
b29ae5b
ResourceSetを分離
kagematya Nov 3, 2016
538b4bf
ResourceManager分離
kagematya Nov 3, 2016
2b16f32
便利関数追加
kagematya Nov 3, 2016
1512ab4
未使用マクロ削除
kagematya Nov 3, 2016
37951f2
CustomSprite分離
kagematya Nov 3, 2016
b36c092
newをしている箇所を明示的にするため、Createを廃止して処理をコンストラクタに任せるようにしました
kagematya Nov 3, 2016
7d60398
メモリリークのチェッカーを仕込みました
kagematya Nov 3, 2016
793cb2b
AddDataの直後で必ずtrueになるため、ResourceSet::isDataAutoReleaseは廃止します
kagematya Nov 3, 2016
2d2a92c
ResourceSetのメンバにprefix導入
kagematya Nov 3, 2016
ffa45f9
ResourceSetのコンストラクタにセットする処理を移行
kagematya Nov 3, 2016
0c62438
メモリリークを改善
kagematya Nov 4, 2016
0ce83c0
データ読み込み部分をライブラリの外側で行えるようにしました。
kagematya Nov 6, 2016
2e8d746
コード整理
kagematya Nov 6, 2016
857ca00
同一キーでregist/unregistされた時に備えて、内部で登録数をカウントするようにしました
kagematya Nov 6, 2016
7832618
ToPointer経由のアクセスをAnimeCacheを利用するように修正
kagematya Nov 6, 2016
d853024
vertexにmatrixを掛けるだけで済むのでそのように修正
kagematya Nov 6, 2016
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1,363 changes: 65 additions & 1,298 deletions samples/DXLibrary/basic/SSPlayer/SS5Player.cpp

Large diffs are not rendered by default.

300 changes: 1 addition & 299 deletions samples/DXLibrary/basic/SSPlayer/SS5Player.h
Original file line number Diff line number Diff line change
Expand Up @@ -105,300 +105,11 @@ class ResourceSet;
struct ProjectData;
class SSSize;
class Player;
class ResourceManager;

//関数定義
extern void get_uv_rotation(float *u, float *v, float cu, float cv, float deg);

/**
* 定数
*/

#define __SSPI__ (3.14159265358979323846f)
#define __SS2PI__ (__SSPI__ * 2)

#define SS_SAFE_DELETE(p) do { if(p) { delete (p); (p) = 0; } } while(0)
#define SS_SAFE_DELETE_ARRAY(p) do { if(p) { delete[] (p); (p) = 0; } } while(0)
#define SS_SAFE_FREE(p) do { if(p) { free(p); (p) = 0; } } while(0)
#define SS_SAFE_RELEASE(p) do { if(p) { (p)->release(); } } while(0)
#define SS_SAFE_RELEASE_NULL(p) do { if(p) { (p)->release(); (p) = 0; } } while(0)
#define SS_SAFE_RETAIN(p) do { if(p) { (p)->retain(); } } while(0)
#define SS_BREAK_IF(cond) if(cond) break

#ifdef _DEBUG
#define SSLOG(...) do {} while (0)
#define SS_ASSERT(cond) assert(cond)
#define SS_ASSERT2(cond, msg) SS_ASSERT(cond)
#define SSLOGERROR(format,...) do {} while (0)
#else
#define SSLOG(...) do {} while (0)
#define SS_ASSERT(cond)
#define SS_ASSERT2(cond, msg) ((void)(cond))
#define SSLOGERROR(format,...) do {} while (0)
#endif


/**
* CustomSprite
*/
class CustomSprite
{
private:
bool _useCustomShaderProgram;
float _opacity;
int _hasPremultipliedAlpha;
int _colorBlendFuncNo;
bool _flipX;
bool _flipY;

public:
SSMatrix _mat;
State _state;
bool _isStateChanged;
CustomSprite* _parent;
Player* _ssplayer;
float _liveFrame;

//エフェクト用パラメータ
SsEffectRenderV2* refEffect;
SsPartState partState;

//モーションブレンド用ステータス
State _orgState;

//エフェクト制御用ワーク
bool effectAttrInitialized;
float effectTimeTotal;

//Ver4互換用ワーク
SsVector3 _temp_position;
SsVector3 _temp_rotation;
SsVector2 _temp_scale;

public:
CustomSprite();
virtual ~CustomSprite();

static CustomSprite* create();

void initState()
{
_state.init();
_isStateChanged = true;
}

void setStateValue(float& ref, float value)
{
if (ref != value)
{
ref = value;
_isStateChanged = true;
}
}

void setStateValue(int& ref, int value)
{
if (ref != value)
{
ref = value;
_isStateChanged = true;
}
}

void setStateValue(bool& ref, bool value)
{
if (ref != value)
{
ref = value;
_isStateChanged = true;
}
}

void setStateValue(SSV3F_C4B_T2F_Quad& ref, SSV3F_C4B_T2F_Quad value)
{
// if (ref != value)
{
ref = value;
_isStateChanged = true;
}
}

void setState(const State& state)
{
setStateValue(_state.flags, state.flags);
setStateValue(_state.cellIndex, state.cellIndex);
setStateValue(_state.x, state.x);
setStateValue(_state.y, state.y);
setStateValue(_state.z, state.z);
setStateValue(_state.pivotX, state.pivotX);
setStateValue(_state.pivotY, state.pivotY);
setStateValue(_state.rotationX, state.rotationX);
setStateValue(_state.rotationY, state.rotationY);
setStateValue(_state.rotationZ, state.rotationZ);
setStateValue(_state.scaleX, state.scaleX);
setStateValue(_state.scaleY, state.scaleY);
setStateValue(_state.opacity, state.opacity);
setStateValue(_state.size_X, state.size_X);
setStateValue(_state.size_Y, state.size_Y);
setStateValue(_state.uv_move_X, state.uv_move_X);
setStateValue(_state.uv_move_Y, state.uv_move_Y);
setStateValue(_state.uv_rotation, state.uv_rotation);
setStateValue(_state.uv_scale_X, state.uv_scale_X);
setStateValue(_state.uv_scale_Y, state.uv_scale_Y);
setStateValue(_state.boundingRadius, state.boundingRadius);
setStateValue(_state.isVisibled, state.isVisibled);
setStateValue(_state.flipX, state.flipX);
setStateValue(_state.flipY, state.flipY);
setStateValue(_state.blendfunc, state.blendfunc);
setStateValue(_state.colorBlendFunc, state.colorBlendFunc);
setStateValue(_state.colorBlendType, state.colorBlendType);

setStateValue(_state.quad, state.quad);
_state.texture = state.texture;
_state.rect = state.rect;
_state.mat = state.mat;

setStateValue(_state.instanceValue_curKeyframe, state.instanceValue_curKeyframe);
setStateValue(_state.instanceValue_startFrame, state.instanceValue_startFrame);
setStateValue(_state.instanceValue_endFrame, state.instanceValue_endFrame);
setStateValue(_state.instanceValue_loopNum, state.instanceValue_loopNum);
setStateValue(_state.instanceValue_speed, state.instanceValue_speed);
setStateValue(_state.instanceValue_loopflag, state.instanceValue_loopflag);
setStateValue(_state.effectValue_curKeyframe, state.effectValue_curKeyframe);
setStateValue(_state.effectValue_startTime, state.effectValue_startTime);
setStateValue(_state.effectValue_speed, state.effectValue_speed);
setStateValue(_state.effectValue_loopflag, state.effectValue_loopflag);

_state.Calc_rotationX = state.Calc_rotationX;
_state.Calc_rotationY = state.Calc_rotationY;
_state.Calc_rotationZ = state.Calc_rotationZ;
_state.Calc_scaleX = state.Calc_scaleX;
_state.Calc_scaleY = state.Calc_scaleY;
_state.Calc_opacity = state.Calc_opacity;

}


// original functions
void setFlippedX(bool flip);
void setFlippedY(bool flip);
bool isFlippedX();
bool isFlippedY();

public:
};


/**
* ResourceManager
*/
//class ResourceManager : public Ref
class ResourceManager
{
public:
static const std::string s_null;

/**
* デフォルトインスタンスを取得します.
*
* @return デフォルトのResourceManagerインスタンス
*/
static ResourceManager* getInstance();

/**
* ssbpファイルを読み込み管理対象とします.
* dataKeyはssbpのファイル名(拡張子なし)になります.
*
* @param ssbpFilepath ssbpファイルのパス
* @param imageBaseDir 画像ファイルの読み込み元ルートパス. 省略時はssbpのある場所をルートとします.
* @return dataKey
*/
std::string addData(const std::string& ssbpFilepath, const std::string& imageBaseDir = s_null);

/**
* ssbpファイルを読み込み管理対象とします.
*
* @param dataKey dataKeyの指定
* @param ssbpFilepath ssbpファイルのパス
* @param imageBaseDir 画像ファイルの読み込み元ルートパス. 省略時はssbpのある場所をルートとします.
* @return dataKey
*/
std::string addDataWithKey(const std::string& dataKey, const std::string& ssbpFilepath, const std::string& imageBaseDir = s_null);

/**
* 指定されたssbpデータを管理対象とします.
*
* @param dataKey dataKeyの指定
* @param data ssbpデータ
* @param imageBaseDir 画像ファイルの読み込み元ルートパス. 省略時はssbpのある場所をルートとします.
* @return dataKey
*/
std::string addData(const std::string& dataKey, const ProjectData* data, const std::string& imageBaseDir = s_null);

/**
* 指定データを解放します.
* パス、拡張子を除いたssbp名を指定してください。
*
* @param dataKey
*/
void removeData(const std::string& dataKey);

/**
* 全てのデータを解放します.
*/
void removeAllData();

/**
* 名前に対応するデータ取得します.
*/
ResourceSet* getData(const std::string& dataKey);

/**
* 指定したセルのテクスチャを変更します.
* @param ssbpName ssbp名(拡張子を除くファイル名)
* @param ssceName ssce名(拡張子を除くファイル名)
* @param texture 変更後のテクスチャハンドル
* @return 変更を行ったか
*/
bool changeTexture(char* ssbpName, char* ssceName, long texture);

/**
* 指定したデータのテクスチャを破棄します。
* @param dataName ssbp名(拡張子を除くファイル名)
* @return 成功失敗
*/
bool releseTexture(std::string);

/**
* 読み込んでいるssbpからアニメーションの総フレーム数を取得します。
* @param ssbpName ssbp名(拡張子を除くファイル名)
* @param animeName ssae/モーション名
* @return アニメーションの総フレーム(存在しない場合はアサート)
*/
int getMaxFrame(std::string ssbpName, std::string animeName);

/**
* 名前が登録されていればtrueを返します
*
* @param dataKey
* @return
*/
bool isDataKeyExists(const std::string& dataKey);

/**
* 新たなResourceManagerインスタンスを構築します.
*
* @return ResourceManagerインスタンス
*/
static ResourceManager* create();

public:
ResourceManager(void);
virtual ~ResourceManager();

protected:
std::map<std::string, ResourceSet*> _dataDic;
};



/**
Expand Down Expand Up @@ -731,15 +442,6 @@ class Player
*/
void setData(const std::string& dataKey);

/**
* 設定されているssbpデータを解放します.
*/
void releaseData();

/**
* 設定されているアニメーションを解放します.
*/
void releaseAnime();

/**
* アニメーションの再生を開始します.
Expand Down
63 changes: 5 additions & 58 deletions samples/DXLibrary/basic/SSPlayer/SS5PlayerPlatform.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -12,39 +12,6 @@

namespace ss
{
/**
* ファイル読み込み
*/
unsigned char* SSFileOpen(const char* pszFileName, const char* pszMode, unsigned long * pSize)
{
unsigned char * pBuffer = NULL;
SS_ASSERT2(pszFileName != NULL && pSize != NULL && pszMode != NULL, "Invalid parameters.");
*pSize = 0;
do
{
// read the file from hardware
FILE *fp = fopen(pszFileName, pszMode);
SS_BREAK_IF(!fp);

fseek(fp,0,SEEK_END);
*pSize = ftell(fp);
fseek(fp,0,SEEK_SET);
pBuffer = new unsigned char[*pSize];
*pSize = fread(pBuffer,sizeof(unsigned char), *pSize,fp);
fclose(fp);
} while (0);
if (! pBuffer)
{

std::string msg = "Get data from file(";
msg.append(pszFileName).append(") failed!");

SSLOG("%s", msg.c_str());

}
return pBuffer;
}

/**
* テクスチャの読み込み
*/
Expand Down Expand Up @@ -230,31 +197,11 @@ namespace ss
quad.br.vertices.x += cx;
quad.br.vertices.y += cy;

float x, y;
SSMatrix t;
t.setupTranslation(quad.tl.vertices.x, quad.tl.vertices.y, 0.0f);
t *= state.mat;
t.getTranslation(&x, &y);
quad.tl.vertices.x = x;
quad.tl.vertices.y = y;

t.setupTranslation(quad.tr.vertices.x, quad.tr.vertices.y, 0.0f);
t *= state.mat;
t.getTranslation(&x, &y);
quad.tr.vertices.x = x;
quad.tr.vertices.y = y;

t.setupTranslation(quad.bl.vertices.x, quad.bl.vertices.y, 0.0f);
t *= state.mat;
t.getTranslation(&x, &y);
quad.bl.vertices.x = x;
quad.bl.vertices.y = y;

t.setupTranslation(quad.br.vertices.x, quad.br.vertices.y, 0.0f);
t *= state.mat;
t.getTranslation(&x, &y);
quad.br.vertices.x = x;
quad.br.vertices.y = y;

quad.vertexForeach([&](SSVertex3F &v){
v *= state.mat;
});

#else
float x, y;
state.mat.getTranslation(&x, &y); /// 表示座標はマトリクスから取得します。 float rotationZ = state.Calc_rotationZ; /// 回転値
Expand Down
Loading