📄 bitaudio.h
字号:
#ifndef __BITAUDIO_H__
#define __BITAUDIO_H__
#include "smp_datastruct.h"
/*****Audio Msg Type *******************************/
const int CAudio_end = 0; // 0 indicate an end of all messages
//CAudio_player_Num 1-11;
const int CAudio_ball = 12;
const int CAudio_pass = 13;
const int CAudio_Ctrl = 14;
const int CAudio_extend = 15;
/////////////////////////////////////////////////
const int CAudio_Invalid_Num = 0;
#define CAudio_type_bits 4
#define CAudio_Num_bits 5
/*-----------------------CParseBit 2002.3.15 laoni
This class helps to construct and parse imformation to the length of bit
loak,clear() ,add() are used for construction
rewind() ,get() are for parsing
---------------------------------------*/
#define Max_Audio_Bytes 512 //it should be 10 in version8
const char map_of_printablechar[] = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSUVWXYZ().+-*/?<>_";
class CParseBit{
private:
int buf_bits_len;
int cur_buf_pos;
unsigned char buffer[Max_Audio_Bytes];
public:
CParseBit();
inline int GetTotalBits(){return buf_bits_len;}
inline unsigned char* GetBufHead(){return buffer;}
void Clear();
inline void Rewind(){ cur_buf_pos = 0; }
bool Load(unsigned char * s,int length);
bool Add(unsigned char * s,int n);
bool Get(unsigned char * s,int n);
void TransferToChar(char* msg);
void LoadFromChar(char* msg);
};
/*-----------------CBitAuditory 2002.3.15 laoni
in servers higher than version 8.00,players say messages
less than 10 byte.this class helps to send and recieve
such compact messages,it restore messages in its own
buffer structure.these buffer is to be analysed by
Perceptron::sensory.updata() every circle.
------------------------------------------*/
struct NoiseVector;
const int CP_num_stored_hear_infos = 3;
enum Audio_Pack_Err{
AudioPack_InValid_Num, AudioPack_Inaccurate, AudioPack_Oversize
};
struct AudioDatamap{
static char map_into_printablechar(int i);
static int map_from_printablechar(char m);
int bit_len(int acu, int range_exp);
//map a symmetrical section into [0, map_length]
inline unsigned char map(float realvalue, float valid_length, float map_length){
return (unsigned char)round(map_length * Max(0.0f, Min((realvalue / valid_length + 0.5f), 1.0f)));
}
//antimap [0, map_length] into a symmetrical section
inline float antimap(unsigned char mapvalue, float valid_length, float map_length){
return ((float)mapvalue / map_length - 0.5f) * valid_length;
}
/********* functions that translate data between char-type and float-type *******/
unsigned char f2c_x(float f, int acu, int range_exp);
unsigned char f2c_y(float f, int acu, int range_exp);
float c2f_x(unsigned char c, int acu, int range_exp, float ref_value);
float c2f_y(unsigned char c, int acu, int range_exp, float ref_value);
inline bool IsFullRange(int range_exp){return bool(range_exp == 7);}
float Max_ref_delta(int range_exp);
unsigned char delta_2_accuracy(float delta);
inline float accuracy_2_delta(unsigned char acu);
bool SideSpeak(int NO, int time);
/**/
static void DualByteMap(float x, char* s);
static float DualByteDemap(char* s);
};
class CBitAuditory : public AudioDatamap{
protected:
int range_exp, rec_range_exp;
bool heard_my_side;
protected:
/*Say */
bool announce_side; //player no code rule
CParseBit msg;
Audio_Pack_Err pack_err_type; //record last error of packing msg
void AddPosMsg(CParseBit& pb, float x, float y, unsigned char acu);
void AddVelMsg(CParseBit& pb, unsigned char time_delay, const Vector& vel);
/*Hear*/
int parse_time;
void ParseMsg_Ball(CParseBit& pb);
void ParseMsg_Pass(CParseBit& pb);
void ParseMsg_Player(CParseBit& pb, int no);
void ParseMsg_Ctrl(CParseBit& pb, int speaker);
void ParseMsg_Extend(CParseBit& pb);
void HearBallPos(TimedData<NoiseVector>& data);
void HearBallVel(TimedData<NoiseVector>& data);
void HearPlayerPos(TimedData<NoiseVector>& data, int No);
void HearPass(int time);
void HearBallController(int No);
public:
TimedDataArray<int, CP_num_stored_hear_infos> rec_hear_info;
public:
CBitAuditory();
float Quantize_delta(int acu);
void ProcessMsg(char * auditorymsg, int speaker, int time);
bool AddPosMsg(unsigned char type, unsigned char acu, float x, float y);
bool AddPosMsg(unsigned char type, unsigned char acu, const Vector& pos);
bool AddVelMsg(unsigned char type, unsigned char time_delay, const Vector& vel);
void InitSay();
bool SayBall();
bool SayPlayer(int num);
bool SayPass();
bool SayCtrl();
};
#endif //__BITAUDIO_H__
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -