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 );	
}