/* * Seven Kingdoms: Ancient Adversaries * * Copyright 1997,1998 Enlight Software Ltd. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * */ //Filename : OBULLET.H //Description : Header file of Object Bullet //Owner : Alex #ifndef __OBULLET_H #define __OBULLET_H #ifndef __OSPRITE_H #include #endif #ifndef __OUNIT_H #include #endif #ifndef __OFIRM_H #include #endif //------ define the parent type ------// enum { BULLET_BY_UNIT = 1, BULLET_BY_FIRM, }; //----------- Define class Bullet -----------// class Unit; #pragma pack(1) class Bullet : public Sprite { public: char parent_type; short parent_recno; //char mobile_type; // mobile type of the bullet char target_mobile_type; float attack_damage; short damage_radius; short nation_recno; char fire_radius; short origin_x, origin_y; short target_x_loc, target_y_loc; char cur_step, total_step; public: Bullet(); virtual void init(char parentType, short parentRecno, short targetXLoc, short targetYLoc, char targetMobileType); void process_move(); int process_die(); void hit_target(short x, short y); void hit_building(short x, short y); void hit_wall(short x, short y); float attenuated_damage(short curX, short curY); int check_hit(); int warn_target(); virtual char display_layer(); int write_file(File* filePtr); int read_file(File* filePtr); virtual int write_derived_file(File* filePtr); virtual int read_derived_file(File* filePtr); //-------------- multiplayer checking codes ---------------// virtual UCHAR crc8(); virtual void clear_ptr(); }; #pragma pack() //------- Define class BulletArray ---------// class BulletArray : public SpriteArray { public: BulletArray(int initArraySize); int create_bullet(short spriteId, Bullet** =NULL); short add_bullet(Unit* parentUnit, Unit* targetUnit); // unit attacks unit short add_bullet(Unit* parentUnit, short xLoc, short yLoc); // unit attacks firm, town short add_bullet(Firm* parentFirm, Unit* targetUnit); // firm attacks unit short add_bullet(Firm* parentFirm, Firm* targetFirm); // firm attacks firm int add_bullet_possible(short startXLoc, short startYLoc, char attackerMobileType, short targetXLoc, short targetYLoc, char targetMobileType, short targetWidth, short targetHeight, short& resultXLoc, short& resultYLoc, char bulletSpeed, short bulletSpriteId); int bullet_path_possible(short startXLoc, short startYLoc, char attackerMobileType, short destXLoc, short destYLoc, char targetMobileType, char bulletSpeed, short bulletSpriteId); int write_file(File* filePtr); int read_file(File* filePtr); int bullet_class_size(int spriteId); #ifdef DEBUG Bullet* operator[](int recNo); #else Bullet* operator[](int recNo) { return (Bullet*) get_ptr(recNo); } #endif }; extern BulletArray bullet_array; //-----------------------------------------// #endif