www.pudn.com > FlashFormat.rar > FDTButtons.cpp
// Copyright © 1999 Middlesoft, Inc. All rights reserved.
// First Created By Lee Thomason.
// First Created On 09/08/1999.
// Last Modified On 11/09/1999.
/****************************************************************************************
File Summary: FDTButtons.cpp
This source file contains the definition for all low-level button-related functions,
grouped by classes:
Class Member Function
FButtonRecord1 FButtonRecord1(U8, U8, U8, U8, U16, FMatrix*);
FButtonRecord1 ~FButtonRecord1();
void WriteToSWFStream(FSWFStream*);
FButtonRecord2 FButtonRecord2(U8, U8, U8, U8, U16, U16, FMatrix*, FACXForm*);
~FButtonRecord2();
void WriteToSWFStream(FSWFStream*);
FButtonRecordList FButtonRecordList();
~FButtonRecordList();
void AddRecord(FAButtonRecord*);
int Size();
void WriteToSWFStream(FSWFStream*);
FDTDefineButton FDTDefineButton(void);
~FDTDefineButton();
U16 ID(void);
void AddButtonRecord(FButtonRecord1*);
void AddActionRecord(FActionRecord*);
void WriteToSWFStream(FSWFStream*);
FDTDefineButton2 FDTDefineButton2(U8);
~FDTDefineButton2(void);
U16 ID(void);
void AddButtonRecord(FButtonRecord2*);
void AddActionCondition(FActionCondition*);
void WriteToSWFStream(FSWFStream*);
FDTDefineButtonCXForm FDTDefineButtonCXForm(U16, FCXForm*);
~FDTDefineButtonCXForm();
void WriteToSWFStream(FSWFStream*);
FDTDefineButtonSound FDTDefineButtonSound(U16, U16, FSoundInfo*, U16, FSoundInfo*,
U16, FSoundInfo*, U16, FSoundInfo*);
~FDTDefineButtonSound();
void WriteToSWFStream(FSWFStream*);
****************************************************************************************/
#pragma warning (disable:4786)
#include "FDTButtons.h"
#include "FPrimitive.h"
#include "FAction.h"
#include "FDTShapes.h"
#include "FDTSounds.h"
//////////////////////////////////////////////////////////////////////////////////////
// -------- FButtonRecord1 ---------------------------------------------------------
FButtonRecord1::FButtonRecord1(U8 _hit, U8 _down, U8 _over, U8 _up, U16 _layer, FMatrix *_matrix){
hit = _hit;
down = _down;
over = _over;
up = _up;
layer = _layer;
matrix = _matrix;
characterID = FObjCollection::Increment();
}
FButtonRecord1::~FButtonRecord1(){
delete matrix;
}
void FButtonRecord1::WriteToSWFStream(FSWFStream* _SWFStream){
_SWFStream->WriteBits(0, 4);
_SWFStream->WriteBits(hit, 1);
_SWFStream->WriteBits(down, 1);
_SWFStream->WriteBits(over, 1);
_SWFStream->WriteBits(up, 1);
_SWFStream->WriteWord(characterID);
_SWFStream->WriteWord(layer);
matrix->WriteToSWFStream(_SWFStream);
}
//////////////////////////////////////////////////////////////////////////////////////
// -------- FButtonRecord2 ---------------------------------------------------------
FButtonRecord2::FButtonRecord2(U8 _hit, U8 _down, U8 _over, U8 _up, U16 _characterID, U16 _layer, FMatrix *_matrix, FACXForm *_colorTransform){
hit = _hit;
down = _down;
over = _over;
up = _up;
characterID = _characterID;
layer = _layer;
matrix = _matrix;
colorTransform = _colorTransform;
}
FButtonRecord2::~FButtonRecord2(){
delete matrix;
delete colorTransform;
}
void FButtonRecord2::WriteToSWFStream(FSWFStream* _SWFStream){
_SWFStream->WriteBits(0, 4);
_SWFStream->WriteBits(hit, 1);
_SWFStream->WriteBits(down, 1);
_SWFStream->WriteBits(over, 1);
_SWFStream->WriteBits(up, 1);
_SWFStream->WriteWord(characterID);
_SWFStream->WriteWord(layer);
matrix->WriteToSWFStream(_SWFStream);
colorTransform->WriteToSWFStream(_SWFStream);
}
//////////////////////////////////////////////////////////////////////////////////////
// -------- FButtonRecordList ------------------------------------------------------
FButtonRecordList::FButtonRecordList(){}
FButtonRecordList::~FButtonRecordList(){
while (!listOfButtonRecords.empty()){
delete listOfButtonRecords.front();
listOfButtonRecords.pop_front();
}
}
void FButtonRecordList::AddRecord(FAButtonRecord* _buttonRecord){
listOfButtonRecords.push_back(_buttonRecord);
}
int FButtonRecordList::Size(){
return listOfButtonRecords.size();
}
void FButtonRecordList::WriteToSWFStream(FSWFStream* _SWFStream){
std::list::iterator cursor;
for (cursor = listOfButtonRecords.begin(); cursor != listOfButtonRecords.end(); cursor++) {
(*cursor)->WriteToSWFStream(_SWFStream);
}
}
//////////////////////////////////////////////////////////////////////////////////////
// -------- FDTDefineButton --------------------------------------------------------
FDTDefineButton::FDTDefineButton(void){
characterID = FObjCollection::Increment();
}
FDTDefineButton::~FDTDefineButton(){
// delete all entries in action record list
while ( !listOfActionRecords.empty() ){
delete listOfActionRecords.front();
listOfActionRecords.pop_front();
}
//delete all entries in button record list
while (!listOfButtonRecords.empty()){
delete listOfButtonRecords.front();
listOfButtonRecords.pop_front();
}
}
U16 FDTDefineButton::ID(void){
return characterID;
}
void FDTDefineButton::AddButtonRecord(FButtonRecord1* _buttonRecord){
listOfButtonRecords.push_back(_buttonRecord);
}
void FDTDefineButton::AddActionRecord(FActionRecord* _actionRecord){
listOfActionRecords.push_back(_actionRecord);
}
void FDTDefineButton::WriteToSWFStream(FSWFStream* _SWFStream){
FSWFStream body;
body.WriteWord((U32)characterID);
//write the button record list to the body
std::list::iterator cursor;
for (cursor = listOfButtonRecords.begin(); cursor != listOfButtonRecords.end(); cursor++) {
(*cursor)->WriteToSWFStream(&body);
}
//write the end of button record flag
body.WriteByte(0);
//write the action record list to the body
std::list::iterator cursor2;
for (cursor2 = listOfActionRecords.begin(); cursor2 != listOfActionRecords.end(); cursor2++){
(*cursor2)->WriteToSWFStream(& body);
}
//write the action end flag
body.WriteByte(0);
_SWFStream->AppendTag( stagDefineButton2, body.Size(), &body );
}
//////////////////////////////////////////////////////////////////////////////////////
// -------- FDTDefineButton2 -------------------------------------------------------
FDTDefineButton2::FDTDefineButton2(U8 _menuFlag){
characterID = FObjCollection::Increment();
menuFlag = _menuFlag;
}
FDTDefineButton2::~FDTDefineButton2(void){
//delete all entries in conditionsList
while (!conditionList.empty()){
delete conditionList.front();
conditionList.pop_front();
}
//delete all entries in listOfButtonRecords
while (!listOfButtonRecords.empty()){
delete listOfButtonRecords.front();
listOfButtonRecords.pop_front();
}
}
U16 FDTDefineButton2::ID(void){
return characterID;
}
void FDTDefineButton2::AddButtonRecord(FButtonRecord2* _buttonRecord){
listOfButtonRecords.push_back(_buttonRecord);
}
void FDTDefineButton2::AddActionCondition(FActionCondition* _actionCondition){
conditionList.push_back(_actionCondition);
}
void FDTDefineButton2::WriteToSWFStream(FSWFStream* _SWFStream){
FSWFStream body;
body.WriteWord((U32)characterID);
body.WriteByte((U32)menuFlag);
FSWFStream buttonRecordStream;
//write the list of button records to button record stream
std::list::iterator cursor;
for (cursor = listOfButtonRecords.begin(); cursor != listOfButtonRecords.end(); cursor++) {
(*cursor)->WriteToSWFStream(&buttonRecordStream);
}
buttonRecordStream.WriteByte( (U32) 0);
U32 offset = buttonRecordStream.Size()+2; //have to count the action offset also
body.WriteWord(offset);
body.Append( &buttonRecordStream );
//write the list of action records
std::list::iterator cursor1;
std::list::iterator cursor2;
cursor2 = (conditionList.end());
cursor2--;
for (cursor1 = conditionList.begin(); cursor1 != cursor2; cursor1++) {
(*cursor1)->WriteToSWFStream(&body);
}
(*cursor1)->WriteToSWFStream(&body, 1); //flag indicating it is the last action condition
_SWFStream->AppendTag( stagDefineButton2, body.Size(), &body );
}
//////////////////////////////////////////////////////////////////////////////////////
// -------- FDTDefineButtonCXForm --------------------------------------------------
FDTDefineButtonCXForm::FDTDefineButtonCXForm(U16 _characterID, FCXForm* _colorTransform){
characterID = _characterID;
colorTransform = _colorTransform;
}
FDTDefineButtonCXForm::~FDTDefineButtonCXForm(){
delete colorTransform;
}
void FDTDefineButtonCXForm::WriteToSWFStream(FSWFStream *_SWFStream){
FSWFStream body;
body.WriteWord((U32)characterID);
colorTransform->WriteToSWFStream( &body );
_SWFStream->AppendTag( stagDefineButtonCxform, body.Size(), &body );
}
//////////////////////////////////////////////////////////////////////////////////////
// -------- FDTDefineButtonSound ---------------------------------------------------
FDTDefineButtonSound::FDTDefineButtonSound(U16 _buttonID, U16 _soundID0, FSoundInfo* _soundInfo0,
U16 _soundID1, FSoundInfo* _soundInfo1,
U16 _soundID2, FSoundInfo* _soundInfo2,
U16 _soundID3, FSoundInfo* _soundInfo3){
buttonID = _buttonID;
soundID0 = _soundID0;
soundInfo0 = _soundInfo0;
soundID1 = _soundID1;
soundInfo1 = _soundInfo1;
soundID2 = _soundID2;
soundInfo2 = _soundInfo2;
soundID3 = _soundID3;
soundInfo3 = _soundInfo3;
}
FDTDefineButtonSound::~FDTDefineButtonSound(){
delete soundInfo0;
delete soundInfo1;
delete soundInfo2;
delete soundInfo3;
}
void FDTDefineButtonSound::WriteToSWFStream(FSWFStream* _SWFStream){
FSWFStream body;
body.WriteWord((U32)buttonID);
body.WriteWord((U32)soundID0);
soundInfo0->WriteToSWFStream(&body);
body.WriteWord((U32)soundID1);
soundInfo1->WriteToSWFStream(&body);
body.WriteWord((U32)soundID2);
soundInfo2->WriteToSWFStream(&body);
body.WriteWord((U32)soundID3);
soundInfo3->WriteToSWFStream(&body);
_SWFStream->AppendTag( stagDefineButtonSound, body.Size(), &body );
}