From: <eX...@us...> - 2007-03-26 15:05:17
|
Revision: 10 http://qonk.svn.sourceforge.net/qonk/?rev=10&view=rev Author: eXinion Date: 2007-03-26 07:55:05 -0700 (Mon, 26 Mar 2007) Log Message: ----------- Added Paths: ----------- branches/networked_original_2007-03-26/ branches/networked_original_2007-03-26/client/ branches/networked_original_2007-03-26/client/COPYING branches/networked_original_2007-03-26/client/Makefile branches/networked_original_2007-03-26/client/Makefile_client branches/networked_original_2007-03-26/client/SDL_gfxPrimitives.c branches/networked_original_2007-03-26/client/SDL_gfxPrimitives.h branches/networked_original_2007-03-26/client/SDL_gfxPrimitives_font.h branches/networked_original_2007-03-26/client/actions.cpp branches/networked_original_2007-03-26/client/actions.h branches/networked_original_2007-03-26/client/animations.cpp branches/networked_original_2007-03-26/client/animations.h branches/networked_original_2007-03-26/client/config.cpp branches/networked_original_2007-03-26/client/config.h branches/networked_original_2007-03-26/client/coordinate.cpp branches/networked_original_2007-03-26/client/coordinate.h branches/networked_original_2007-03-26/client/extensions.cpp branches/networked_original_2007-03-26/client/extensions.h branches/networked_original_2007-03-26/client/font.ttf branches/networked_original_2007-03-26/client/fonts.cpp branches/networked_original_2007-03-26/client/fonts.h branches/networked_original_2007-03-26/client/gmon.out branches/networked_original_2007-03-26/client/main.cpp branches/networked_original_2007-03-26/client/messages.cpp branches/networked_original_2007-03-26/client/messages.h branches/networked_original_2007-03-26/client/network.cpp branches/networked_original_2007-03-26/client/network.h branches/networked_original_2007-03-26/client/output branches/networked_original_2007-03-26/client/planets.cpp branches/networked_original_2007-03-26/client/planets.h branches/networked_original_2007-03-26/client/players.cpp branches/networked_original_2007-03-26/client/players.h branches/networked_original_2007-03-26/client/profile branches/networked_original_2007-03-26/client/raknet/ branches/networked_original_2007-03-26/client/raknet/NetworkTypes.h branches/networked_original_2007-03-26/client/raknet/PacketEnumerations.h branches/networked_original_2007-03-26/client/raknet/PacketPriority.h branches/networked_original_2007-03-26/client/raknet/RakClientInterface.h branches/networked_original_2007-03-26/client/raknet/RakNetLibStatic.lib branches/networked_original_2007-03-26/client/raknet/RakNetLibStaticDebug.lib branches/networked_original_2007-03-26/client/raknet/RakNetworkFactory.h branches/networked_original_2007-03-26/client/raknet/RakPeerInterface.h branches/networked_original_2007-03-26/client/raknet/RakServerInterface.h branches/networked_original_2007-03-26/client/raknet/network.cpp branches/networked_original_2007-03-26/client/raknet/network.h branches/networked_original_2007-03-26/client/raknet/ships.cpp branches/networked_original_2007-03-26/client/raknet/ships.h branches/networked_original_2007-03-26/client/selection.cpp branches/networked_original_2007-03-26/client/selection.h branches/networked_original_2007-03-26/client/ships.cpp branches/networked_original_2007-03-26/client/ships.h branches/networked_original_2007-03-26/client/stars.cpp branches/networked_original_2007-03-26/client/stars.h branches/networked_original_2007-03-26/client/timer.cpp branches/networked_original_2007-03-26/client/timer.h branches/networked_original_2007-03-26/client/universe.cpp branches/networked_original_2007-03-26/client/universe.h branches/networked_original_2007-03-26/server/ branches/networked_original_2007-03-26/server/COPYING branches/networked_original_2007-03-26/server/Makefile branches/networked_original_2007-03-26/server/SDL_gfxPrimitives.c branches/networked_original_2007-03-26/server/SDL_gfxPrimitives.h branches/networked_original_2007-03-26/server/SDL_gfxPrimitives_font.h branches/networked_original_2007-03-26/server/actions.cpp branches/networked_original_2007-03-26/server/actions.h branches/networked_original_2007-03-26/server/animations.cpp branches/networked_original_2007-03-26/server/animations.h branches/networked_original_2007-03-26/server/config.cpp branches/networked_original_2007-03-26/server/config.h branches/networked_original_2007-03-26/server/coordinate.cpp branches/networked_original_2007-03-26/server/coordinate.h branches/networked_original_2007-03-26/server/extensions.cpp branches/networked_original_2007-03-26/server/extensions.h branches/networked_original_2007-03-26/server/font.ttf branches/networked_original_2007-03-26/server/fonts.cpp branches/networked_original_2007-03-26/server/fonts.h branches/networked_original_2007-03-26/server/gmon.out branches/networked_original_2007-03-26/server/main.cpp branches/networked_original_2007-03-26/server/main.cpp.notneeded branches/networked_original_2007-03-26/server/main.h branches/networked_original_2007-03-26/server/messages.cpp branches/networked_original_2007-03-26/server/messages.h branches/networked_original_2007-03-26/server/network.cpp branches/networked_original_2007-03-26/server/network.h branches/networked_original_2007-03-26/server/output branches/networked_original_2007-03-26/server/planets.cpp branches/networked_original_2007-03-26/server/planets.h branches/networked_original_2007-03-26/server/players.cpp branches/networked_original_2007-03-26/server/players.h branches/networked_original_2007-03-26/server/profile branches/networked_original_2007-03-26/server/raknet/ branches/networked_original_2007-03-26/server/raknet/NetworkTypes.h branches/networked_original_2007-03-26/server/raknet/PacketEnumerations.h branches/networked_original_2007-03-26/server/raknet/PacketPriority.h branches/networked_original_2007-03-26/server/raknet/RakClientInterface.h branches/networked_original_2007-03-26/server/raknet/RakNetLibStatic.lib branches/networked_original_2007-03-26/server/raknet/RakNetLibStaticDebug.lib branches/networked_original_2007-03-26/server/raknet/RakNetworkFactory.h branches/networked_original_2007-03-26/server/raknet/RakPeerInterface.h branches/networked_original_2007-03-26/server/raknet/RakServerInterface.h branches/networked_original_2007-03-26/server/selection.cpp branches/networked_original_2007-03-26/server/selection.h branches/networked_original_2007-03-26/server/ships.cpp branches/networked_original_2007-03-26/server/ships.h branches/networked_original_2007-03-26/server/stars.cpp branches/networked_original_2007-03-26/server/stars.h branches/networked_original_2007-03-26/server/timer.cpp branches/networked_original_2007-03-26/server/timer.h branches/networked_original_2007-03-26/server/universe.cpp branches/networked_original_2007-03-26/server/universe.h Added: branches/networked_original_2007-03-26/client/COPYING =================================================================== --- branches/networked_original_2007-03-26/client/COPYING (rev 0) +++ branches/networked_original_2007-03-26/client/COPYING 2007-03-26 14:55:05 UTC (rev 10) @@ -0,0 +1,340 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + <one line to give the program's name and a brief idea of what it does.> + Copyright (C) <year> <name of author> + + 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, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + <signature of Ty Coon>, 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. Added: branches/networked_original_2007-03-26/client/Makefile =================================================================== --- branches/networked_original_2007-03-26/client/Makefile (rev 0) +++ branches/networked_original_2007-03-26/client/Makefile 2007-03-26 14:55:05 UTC (rev 10) @@ -0,0 +1,15 @@ +CXX=g++ +CFLAGS=`sdl-config --cflags` -O3 -I/usr/local/include/raknet +LIBS=`sdl-config --libs` -lSDL_ttf -lraknet +OBJECTS=SDL_gfxPrimitives.o extensions.o coordinate.o stars.o planets.o selection.o ships.o main.o actions.o players.o universe.o animations.o fonts.o messages.o timer.o config.o network.o + +all: qonk + +qonk: $(OBJECTS) + $(CXX) $(CFLAGS) $(LIBS) $(OBJECTS) -o qonk + +.cpp.o: + $(CXX) $(CFLAGS) -c $< + +clean: + @rm -vf *.o *~ qonk screenshot.bmp DEADJOE Added: branches/networked_original_2007-03-26/client/Makefile_client =================================================================== --- branches/networked_original_2007-03-26/client/Makefile_client (rev 0) +++ branches/networked_original_2007-03-26/client/Makefile_client 2007-03-26 14:55:05 UTC (rev 10) @@ -0,0 +1,15 @@ +CXX=g++ +CFLAGS=`sdl-config --cflags` -O3 -I/usr/local/include/raknet -I/usr/local/lib +LIBS=`sdl-config --libs` -lSDL_ttf -lraknet +OBJECTS=SDL_gfxPrimitives.o extensions.o coordinate.o stars.o planets.o selection.o ships.o main.o actions.o players.o universe.o animations.o fonts.o messages.o timer.o config.o network.o + +all: qonk + +qonk: $(OBJECTS) + $(CXX) $(CFLAGS) $(LIBS) $(OBJECTS) -o qonk + +.cpp.o: + $(CXX) $(CFLAGS) -c $< + +clean: + @rm -vf *.o *~ qonk screenshot.bmp DEADJOE Added: branches/networked_original_2007-03-26/client/SDL_gfxPrimitives.c =================================================================== --- branches/networked_original_2007-03-26/client/SDL_gfxPrimitives.c (rev 0) +++ branches/networked_original_2007-03-26/client/SDL_gfxPrimitives.c 2007-03-26 14:55:05 UTC (rev 10) @@ -0,0 +1,3708 @@ +/* + + SDL_gfxPrimitives - Graphics primitives for SDL surfaces + + LGPL (c) A. Schiffler + +*/ + +#include <stdio.h> +#include <stdlib.h> +#include <math.h> +#include <string.h> + +#include "SDL_gfxPrimitives.h" +#include "SDL_gfxPrimitives_font.h" + +/* -===================- */ + +/* ----- Defines for pixel clipping tests */ + +#define clip_xmin(surface) surface->clip_rect.x +#define clip_xmax(surface) surface->clip_rect.x+surface->clip_rect.w-1 +#define clip_ymin(surface) surface->clip_rect.y +#define clip_ymax(surface) surface->clip_rect.y+surface->clip_rect.h-1 + +/* ----- Pixel - fast, no blending, no locking, clipping */ + +int fastPixelColorNolock(SDL_Surface * dst, Sint16 x, Sint16 y, Uint32 color) +{ + int bpp; + Uint8 *p; + + /* + * Honor clipping setup at pixel level + */ + if ((x >= clip_xmin(dst)) && (x <= clip_xmax(dst)) && (y >= clip_ymin(dst)) && (y <= clip_ymax(dst))) { + + /* + * Get destination format + */ + bpp = dst->format->BytesPerPixel; + p = (Uint8 *) dst->pixels + y * dst->pitch + x * bpp; + switch (bpp) { + case 1: + *p = color; + break; + case 2: + *(Uint16 *) p = color; + break; + case 3: + if (SDL_BYTEORDER == SDL_BIG_ENDIAN) { + p[0] = (color >> 16) & 0xff; + p[1] = (color >> 8) & 0xff; + p[2] = color & 0xff; + } else { + p[0] = color & 0xff; + p[1] = (color >> 8) & 0xff; + p[2] = (color >> 16) & 0xff; + } + break; + case 4: + *(Uint32 *) p = color; + break; + } /* switch */ + + + } + + return (0); +} + +/* ----- Pixel - fast, no blending, no locking, no clipping */ + +/* (faster but dangerous, make sure we stay in surface bounds) */ + +int fastPixelColorNolockNoclip(SDL_Surface * dst, Sint16 x, Sint16 y, Uint32 color) +{ + int bpp; + Uint8 *p; + + /* + * Get destination format + */ + bpp = dst->format->BytesPerPixel; + p = (Uint8 *) dst->pixels + y * dst->pitch + x * bpp; + switch (bpp) { + case 1: + *p = color; + break; + case 2: + *(Uint16 *) p = color; + break; + case 3: + if (SDL_BYTEORDER == SDL_BIG_ENDIAN) { + p[0] = (color >> 16) & 0xff; + p[1] = (color >> 8) & 0xff; + p[2] = color & 0xff; + } else { + p[0] = color & 0xff; + p[1] = (color >> 8) & 0xff; + p[2] = (color >> 16) & 0xff; + } + break; + case 4: + *(Uint32 *) p = color; + break; + } /* switch */ + + return (0); +} + +/* ----- Pixel - fast, no blending, locking, clipping */ + +int fastPixelColor(SDL_Surface * dst, Sint16 x, Sint16 y, Uint32 color) +{ + int result; + + /* + * Lock the surface + */ + if (SDL_MUSTLOCK(dst)) { + if (SDL_LockSurface(dst) < 0) { + return (-1); + } + } + + result = fastPixelColorNolock(dst, x, y, color); + + /* + * Unlock surface + */ + if (SDL_MUSTLOCK(dst)) { + SDL_UnlockSurface(dst); + } + + return (result); +} + +/* ----- Pixel - fast, no blending, locking, RGB input */ + +int fastPixelRGBA(SDL_Surface * dst, Sint16 x, Sint16 y, Uint8 r, Uint8 g, Uint8 b, Uint8 a) +{ + Uint32 color; + + /* + * Setup color + */ + color = SDL_MapRGBA(dst->format, r, g, b, a); + + /* + * Draw + */ + return (fastPixelColor(dst, x, y, color)); + +} + +/* ----- Pixel - fast, no blending, no locking RGB input */ + +int fastPixelRGBANolock(SDL_Surface * dst, Sint16 x, Sint16 y, Uint8 r, Uint8 g, Uint8 b, Uint8 a) +{ + Uint32 color; + + /* + * Setup color + */ + color = SDL_MapRGBA(dst->format, r, g, b, a); + + /* + * Draw + */ + return (fastPixelColorNolock(dst, x, y, color)); +} + +/* PutPixel routine with alpha blending, input color in destination format */ + +/* New, faster routine - default blending pixel */ + +int _putPixelAlpha(SDL_Surface * surface, Sint16 x, Sint16 y, Uint32 color, Uint8 alpha) +{ + Uint32 Rmask = surface->format->Rmask, Gmask = + surface->format->Gmask, Bmask = surface->format->Bmask, Amask = surface->format->Amask; + Uint32 R, G, B, A = 0; + + if (x >= clip_xmin(surface) && x <= clip_xmax(surface) + && y >= clip_ymin(surface) && y <= clip_ymax(surface)) { + + switch (surface->format->BytesPerPixel) { + case 1:{ /* Assuming 8-bpp */ + if (alpha == 255) { + *((Uint8 *) surface->pixels + y * surface->pitch + x) = color; + } else { + Uint8 *pixel = (Uint8 *) surface->pixels + y * surface->pitch + x; + + Uint8 dR = surface->format->palette->colors[*pixel].r; + Uint8 dG = surface->format->palette->colors[*pixel].g; + Uint8 dB = surface->format->palette->colors[*pixel].b; + Uint8 sR = surface->format->palette->colors[color].r; + Uint8 sG = surface->format->palette->colors[color].g; + Uint8 sB = surface->format->palette->colors[color].b; + + dR = dR + ((sR - dR) * alpha >> 8); + dG = dG + ((sG - dG) * alpha >> 8); + dB = dB + ((sB - dB) * alpha >> 8); + + *pixel = SDL_MapRGB(surface->format, dR, dG, dB); + } + } + break; + + case 2:{ /* Probably 15-bpp or 16-bpp */ + if (alpha == 255) { + *((Uint16 *) surface->pixels + y * surface->pitch / 2 + x) = color; + } else { + Uint16 *pixel = (Uint16 *) surface->pixels + y * surface->pitch / 2 + x; + Uint32 dc = *pixel; + + R = ((dc & Rmask) + (((color & Rmask) - (dc & Rmask)) * alpha >> 8)) & Rmask; + G = ((dc & Gmask) + (((color & Gmask) - (dc & Gmask)) * alpha >> 8)) & Gmask; + B = ((dc & Bmask) + (((color & Bmask) - (dc & Bmask)) * alpha >> 8)) & Bmask; + if (Amask) + A = ((dc & Amask) + (((color & Amask) - (dc & Amask)) * alpha >> 8)) & Amask; + + *pixel = R | G | B | A; + } + } + break; + + case 3:{ /* Slow 24-bpp mode, usually not used */ + Uint8 *pix = (Uint8 *) surface->pixels + y * surface->pitch + x * 3; + Uint8 rshift8 = surface->format->Rshift / 8; + Uint8 gshift8 = surface->format->Gshift / 8; + Uint8 bshift8 = surface->format->Bshift / 8; + Uint8 ashift8 = surface->format->Ashift / 8; + + + if (alpha == 255) { + *(pix + rshift8) = color >> surface->format->Rshift; + *(pix + gshift8) = color >> surface->format->Gshift; + *(pix + bshift8) = color >> surface->format->Bshift; + *(pix + ashift8) = color >> surface->format->Ashift; + } else { + Uint8 dR, dG, dB, dA = 0; + Uint8 sR, sG, sB, sA = 0; + + pix = (Uint8 *) surface->pixels + y * surface->pitch + x * 3; + + dR = *((pix) + rshift8); + dG = *((pix) + gshift8); + dB = *((pix) + bshift8); + dA = *((pix) + ashift8); + + sR = (color >> surface->format->Rshift) & 0xff; + sG = (color >> surface->format->Gshift) & 0xff; + sB = (color >> surface->format->Bshift) & 0xff; + sA = (color >> surface->format->Ashift) & 0xff; + + dR = dR + ((sR - dR) * alpha >> 8); + dG = dG + ((sG - dG) * alpha >> 8); + dB = dB + ((sB - dB) * alpha >> 8); + dA = dA + ((sA - dA) * alpha >> 8); + + *((pix) + rshift8) = dR; + *((pix) + gshift8) = dG; + *((pix) + bshift8) = dB; + *((pix) + ashift8) = dA; + } + } + break; + + case 4:{ /* Probably 32-bpp */ + if (alpha == 255) { + *((Uint32 *) surface->pixels + y * surface->pitch / 4 + x) = color; + } else { + Uint32 *pixel = (Uint32 *) surface->pixels + y * surface->pitch / 4 + x; + Uint32 dc = *pixel; + + R = ((dc & Rmask) + (((color & Rmask) - (dc & Rmask)) * alpha >> 8)) & Rmask; + G = ((dc & Gmask) + (((color & Gmask) - (dc & Gmask)) * alpha >> 8)) & Gmask; + B = ((dc & Bmask) + (((color & Bmask) - (dc & Bmask)) * alpha >> 8)) & Bmask; + if (Amask) + A = ((dc & Amask) + (((color & Amask) - (dc & Amask)) * alpha >> 8)) & Amask; + + *pixel = R | G | B | A; + } + } + break; + } + } + + return (0); +} + +/* ----- Pixel - pixel draw with blending enabled if a<255 */ + +int pixelColor(SDL_Surface * dst, Sint16 x, Sint16 y, Uint32 color) +{ + Uint8 alpha; + Uint32 mcolor; + int result = 0; + + /* + * Lock the surface + */ + if (SDL_MUSTLOCK(dst)) { + if (SDL_LockSurface(dst) < 0) { + return (-1); + } + } + + /* + * Setup color + */ + alpha = color & 0x000000ff; + mcolor = + SDL_MapRGBA(dst->format, (color & 0xff000000) >> 24, + (color & 0x00ff0000) >> 16, (color & 0x0000ff00) >> 8, alpha); + + /* + * Draw + */ + result = _putPixelAlpha(dst, x, y, mcolor, alpha); + + /* + * Unlock the surface + */ + if (SDL_MUSTLOCK(dst)) { + SDL_UnlockSurface(dst); + } + + return (result); +} + +int pixelColorNolock(SDL_Surface * dst, Sint16 x, Sint16 y, Uint32 color) +{ + Uint8 alpha; + Uint32 mcolor; + int result = 0; + + /* + * Setup color + */ + alpha = color & 0x000000ff; + mcolor = + SDL_MapRGBA(dst->format, (color & 0xff000000) >> 24, + (color & 0x00ff0000) >> 16, (color & 0x0000ff00) >> 8, alpha); + + /* + * Draw + */ + result = _putPixelAlpha(dst, x, y, mcolor, alpha); + + return (result); +} + + +/* Filled rectangle with alpha blending, color in destination format */ + +int _filledRectAlpha(SDL_Surface * surface, Sint16 x1, Sint16 y1, Sint16 x2, Sint16 y2, Uint32 color, Uint8 alpha) +{ + Uint32 Rmask = surface->format->Rmask, Gmask = + surface->format->Gmask, Bmask = surface->format->Bmask, Amask = surface->format->Amask; + Uint32 R, G, B, A = 0; + Sint16 x, y; + + switch (surface->format->BytesPerPixel) { + case 1:{ /* Assuming 8-bpp */ + Uint8 *row, *pixel; + Uint8 dR, dG, dB; + + Uint8 sR = surface->format->palette->colors[color].r; + Uint8 sG = surface->format->palette->colors[color].g; + Uint8 sB = surface->format->palette->colors[color].b; + + for (y = y1; y <= y2; y++) { + row = (Uint8 *) surface->pixels + y * surface->pitch; + for (x = x1; x <= x2; x++) { + pixel = row + x; + + dR = surface->format->palette->colors[*pixel].r; + dG = surface->format->palette->colors[*pixel].g; + dB = surface->format->palette->colors[*pixel].b; + + dR = dR + ((sR - dR) * alpha >> 8); + dG = dG + ((sG - dG) * alpha >> 8); + dB = dB + ((sB - dB) * alpha >> 8); + + *pixel = SDL_MapRGB(surface->format, dR, dG, dB); + } + } + } + break; + + case 2:{ /* Probably 15-bpp or 16-bpp */ + Uint16 *row, *pixel; + Uint32 dR = (color & Rmask), dG = (color & Gmask), dB = (color & Bmask), dA = (color & Amask); + + for (y = y1; y <= y2; y++) { + row = (Uint16 *) surface->pixels + y * surface->pitch / 2; + for (x = x1; x <= x2; x++) { + pixel = row + x; + + R = ((*pixel & Rmask) + ((dR - (*pixel & Rmask)) * alpha >> 8)) & Rmask; + G = ((*pixel & Gmask) + ((dG - (*pixel & Gmask)) * alpha >> 8)) & Gmask; + B = ((*pixel & Bmask) + ((dB - (*pixel & Bmask)) * alpha >> 8)) & Bmask; + if (Amask) + A = ((*pixel & Amask) + ((dA - (*pixel & Amask)) * alpha >> 8)) & Amask; + + *pixel = R | G | B | A; + } + } + } + break; + + case 3:{ /* Slow 24-bpp mode, usually not used */ + Uint8 *row, *pix; + Uint8 dR, dG, dB, dA; + Uint8 rshift8 = surface->format->Rshift / 8; + Uint8 gshift8 = surface->format->Gshift / 8; + Uint8 bshift8 = surface->format->Bshift / 8; + Uint8 ashift8 = surface->format->Ashift / 8; + + Uint8 sR = (color >> surface->format->Rshift) & 0xff; + Uint8 sG = (color >> surface->format->Gshift) & 0xff; + Uint8 sB = (color >> surface->format->Bshift) & 0xff; + Uint8 sA = (color >> surface->format->Ashift) & 0xff; + + for (y = y1; y <= y2; y++) { + row = (Uint8 *) surface->pixels + y * surface->pitch; + for (x = x1; x <= x2; x++) { + pix = row + x * 3; + + dR = *((pix) + rshift8); + dG = *((pix) + gshift8); + dB = *((pix) + bshift8); + dA = *((pix) + ashift8); + + dR = dR + ((sR - dR) * alpha >> 8); + dG = dG + ((sG - dG) * alpha >> 8); + dB = dB + ((sB - dB) * alpha >> 8); + dA = dA + ((sA - dA) * alpha >> 8); + + *((pix) + rshift8) = dR; + *((pix) + gshift8) = dG; + *((pix) + bshift8) = dB; + *((pix) + ashift8) = dA; + } + } + + } + break; + + case 4:{ /* Probably 32-bpp */ + Uint32 *row, *pixel; + Uint32 dR = (color & Rmask), dG = (color & Gmask), dB = (color & Bmask), dA = (color & Amask); + + for (y = y1; y <= y2; y++) { + row = (Uint32 *) surface->pixels + y * surface->pitch / 4; + for (x = x1; x <= x2; x++) { + pixel = row + x; + + R = ((*pixel & Rmask) + ((dR - (*pixel & Rmask)) * alpha >> 8)) & Rmask; + G = ((*pixel & Gmask) + ((dG - (*pixel & Gmask)) * alpha >> 8)) & Gmask; + B = ((*pixel & Bmask) + ((dB - (*pixel & Bmask)) * alpha >> 8)) & Bmask; + if (Amask) + A = ((*pixel & Amask) + ((dA - (*pixel & Amask)) * alpha >> 8)) & Amask; + + *pixel = R | G | B | A; + } + } + } + break; + } + + return (0); +} + +/* Draw rectangle with alpha enabled from RGBA color. */ + +int filledRectAlpha(SDL_Surface * dst, Sint16 x1, Sint16 y1, Sint16 x2, Sint16 y2, Uint32 color) +{ + Uint8 alpha; + Uint32 mcolor; + int result = 0; + + /* + * Lock the surface + */ + if (SDL_MUSTLOCK(dst)) { + if (SDL_LockSurface(dst) < 0) { + return (-1); + } + } + + /* + * Setup color + */ + alpha = color & 0x000000ff; + mcolor = + SDL_MapRGBA(dst->format, (color & 0xff000000) >> 24, + (color & 0x00ff0000) >> 16, (color & 0x0000ff00) >> 8, alpha); + + /* + * Draw + */ + result = _filledRectAlpha(dst, x1, y1, x2, y2, mcolor, alpha); + + /* + * Unlock the surface + */ + if (SDL_MUSTLOCK(dst)) { + SDL_UnlockSurface(dst); + } + + return (result); +} + +/* Draw horizontal line with alpha enabled from RGBA color */ + +int HLineAlpha(SDL_Surface * dst, Sint16 x1, Sint16 x2, Sint16 y, Uint32 color) +{ + return (filledRectAlpha(dst, x1, y, x2, y, color)); +} + + +/* Draw vertical line with alpha enabled from RGBA color */ + +int VLineAlpha(SDL_Surface * dst, Sint16 x, Sint16 y1, Sint16 y2, Uint32 color) +{ + return (filledRectAlpha(dst, x, y1, x, y2, color)); +} + + +/* Pixel - using alpha weight on color for AA-drawing */ + +int pixelColorWeight(SDL_Surface * dst, Sint16 x, Sint16 y, Uint32 color, Uint32 weight) +{ + Uint32 a; + + /* + * Get alpha + */ + a = (color & (Uint32) 0x000000ff); + + /* + * Modify Alpha by weight + */ + a = ((a * weight) >> 8); + + return (pixelColor(dst, x, y, (color & (Uint32) 0xffffff00) | (Uint32) a)); +} + +/* Pixel - using alpha weight on color for AA-drawing - no locking */ + +int pixelColorWeightNolock(SDL_Surface * dst, Sint16 x, Sint16 y, Uint32 color, Uint32 weight) +{ + Uint32 a; + + /* + * Get alpha + */ + a = (color & (Uint32) 0x000000ff); + + /* + * Modify Alpha by weight + */ + a = ((a * weight) >> 8); + + return (pixelColorNolock(dst, x, y, (color & (Uint32) 0xffffff00) | (Uint32) a)); +} + +int pixelRGBA(SDL_Surface * dst, Sint16 x, Sint16 y, Uint8 r, Uint8 g, Uint8 b, Uint8 a) +{ + Uint32 color; + + /* + * Check Alpha + */ + if (a == 255) { + /* + * No alpha blending required + */ + /* + * Setup color + */ + color = SDL_MapRGBA(dst->format, r, g, b, a); + /* + * Draw + */ + return (fastPixelColor(dst, x, y, color)); + } else { + /* + * Alpha blending required + */ + /* + * Draw + */ + return (pixelColor(dst, x, y, ((Uint32) r << 24) | ((Uint32) g << 16) | ((Uint32) b << 8) | (Uint32) a)); + } +} + +/* ----- Horizontal line */ + +/* Just store color including alpha, no blending */ + +int hlineColorStore(SDL_Surface * dst, Sint16 x1, Sint16 x2, Sint16 y, Uint32 color) +{ + Sint16 left, right, top, bottom; + Uint8 *pixel, *pixellast; + int dx; + int pixx, pixy; + Sint16 w; + Sint16 xtmp; + int result = -1; + + /* + * Get clipping boundary + */ + left = dst->clip_rect.x; + right = dst->clip_rect.x + dst->clip_rect.w - 1; + top = dst->clip_rect.y; + bottom = dst->clip_rect.y + dst->clip_rect.h - 1; + + /* + * Check visibility of hline + */ + if ((x1<left) && (x2<left)) { + return(0); + } + if ((x1>right) && (x2>right)) { + return(0); + } + if ((y<top) || (y>bottom)) { + return (0); + } + + /* + * Clip x + */ + if (x1 < left) { + x1 = left; + } + if (x2 > right) { + x2 = right; + } + + /* + * Swap x1, x2 if required + */ + if (x1 > x2) { + xtmp = x1; + x1 = x2; + x2 = xtmp; + } + + /* + * Calculate width + */ + w = x2 - x1; + + /* + * Sanity check on width + */ + if (w < 0) { + return (0); + } + + /* + * Lock surface + */ + SDL_LockSurface(dst); + + /* + * More variable setup + */ + dx = w; + pixx = dst->format->BytesPerPixel; + pixy = dst->pitch; + pixel = ((Uint8 *) dst->pixels) + pixx * (int) x1 + pixy * (int) y; + + /* + * Draw + */ + switch (dst->format->BytesPerPixel) { + case 1: + memset(pixel, color, dx); + break; + case 2: + pixellast = pixel + dx + dx; + for (; pixel <= pixellast; pixel += pixx) { + *(Uint16 *) pixel = color; + } + break; + case 3: + pixellast = pixel + dx + dx + dx; + for (; pixel <= pixellast; pixel += pixx) { + if (SDL_BYTEORDER == SDL_BIG_ENDIAN) { + pixel[0] = (color >> 16) & 0xff; + pixel[1] = (color >> 8) & 0xff; + pixel[2] = color & 0xff; + } else { + pixel[0] = color & 0xff; + pixel[1] = (color >> 8) & 0xff; + pixel[2] = (color >> 16) & 0xff; + } + } + break; + default: /* case 4 */ + dx = dx + dx; + pixellast = pixel + dx + dx; + for (; pixel <= pixellast; pixel += pixx) { + *(Uint32 *) pixel = color; + } + break; + } + + /* + * Unlock surface + */ + SDL_UnlockSurface(dst); + + /* + * Set result code + */ + result = 0; + + return (result); +} + +int hlineRGBAStore(SDL_Surface * dst, Sint16 x1, Sint16 x2, Sint16 y, Uint8 r, Uint8 g, Uint8 b, Uint8 a) +{ + /* + * Draw + */ + return (hlineColorStore(dst, x1, x2, y, ((Uint32) r << 24) | ((Uint32) g << 16) | ((Uint32) b << 8) | (Uint32) a)); +} + +int hlineColor(SDL_Surface * dst, Sint16 x1, Sint16 x2, Sint16 y, Uint32 color) +{ + Sint16 left, right, top, bottom; + Uint8 *pixel, *pixellast; + int dx; + int pixx, pixy; + Sint16 w; + Sint16 xtmp; + int result = -1; + Uint8 *colorptr; + + /* + * Get clipping boundary + */ + left = dst->clip_rect.x; + right = dst->clip_rect.x + dst->clip_rect.w - 1; + top = dst->clip_rect.y; + bottom = dst->clip_rect.y + dst->clip_rect.h - 1; + + /* + * Check visibility of hline + */ + if ((x1<left) && (x2<left)) { + return(0); + } + if ((x1>right) && (x2>right)) { + return(0); + } + if ((y<top) || (y>bottom)) { + return (0); + } + + /* + * Clip x + */ + if (x1 < left) { + x1 = left; + } + if (x2 > right) { + x2 = right; + } + + /* + * Swap x1, x2 if required + */ + if (x1 > x2) { + xtmp = x1; + x1 = x2; + x2 = xtmp; + } + + /* + * Calculate width + */ + w = x2 - x1; + + /* + * Sanity check on width + */ + if (w < 0) { + return (0); + } + + /* + * Alpha check + */ + if ((color & 255) == 255) { + + /* + * No alpha-blending required + */ + + /* + * Setup color + */ + colorptr = (Uint8 *) & color; + if (SDL_BYTEORDER == SDL_BIG_ENDIAN) { + color = SDL_MapRGBA(dst->format, colorptr[0], colorptr[1], colorptr[2], colorptr[3]); + } else { + color = SDL_MapRGBA(dst->format, colorptr[3], colorptr[2], colorptr[1], colorptr[0]); + } + + /* + * Lock surface + */ + SDL_LockSurface(dst); + + /* + * More variable setup + */ + dx = w; + pixx = dst->format->BytesPerPixel; + pixy = dst->pitch; + pixel = ((Uint8 *) dst->pixels) + pixx * (int) x1 + pixy * (int) y; + + /* + * Draw + */ + switch (dst->format->BytesPerPixel) { + case 1: + memset(pixel, color, dx); + break; + case 2: + pixellast = pixel + dx + dx; + for (; pixel <= pixellast; pixel += pixx) { + *(Uint16 *) pixel = color; + } + break; + case 3: + pixellast = pixel + dx + dx + dx; + for (; pixel <= pixellast; pixel += pixx) { + if (SDL_BYTEORDER == SDL_BIG_ENDIAN) { + pixel[0] = (color >> 16) & 0xff; + pixel[1] = (color >> 8) & 0xff; + pixel[2] = color & 0xff; + } else { + pixel[0] = color & 0xff; + pixel[1] = (color >> 8) & 0xff; + pixel[2] = (color >> 16) & 0xff; + } + } + break; + default: /* case 4 */ + dx = dx + dx; + pixellast = pixel + dx + dx; + for (; pixel <= pixellast; pixel += pixx) { + *(Uint32 *) pixel = color; + } + break; + } + + /* + * Unlock surface + */ + SDL_UnlockSurface(dst); + + /* + * Set result code + */ + result = 0; + + } else { + + /* + * Alpha blending blit + */ + + result = HLineAlpha(dst, x1, x1 + w, y, color); + + } + + return (result); +} + +int hlineRGBA(SDL_Surface * dst, Sint16 x1, Sint16 x2, Sint16 y, Uint8 r, Uint8 g, Uint8 b, Uint8 a) +{ + /* + * Draw + */ + return (hlineColor(dst, x1, x2, y, ((Uint32) r << 24) | ((Uint32) g << 16) | ((Uint32) b << 8) | (Uint32) a)); +} + +/* ----- Vertical line */ + +int vlineColor(SDL_Surface * dst, Sint16 x, Sint16 y1, Sint16 y2, Uint32 color) +{ + Sint16 left, right, top, bottom; + Uint8 *pixel, *pixellast; + int dy; + int pixx, pixy; + Sint16 h; + Sint16 ytmp; + int result = -1; + Uint8 *colorptr; + + /* + * Get clipping boundary + */ + left = dst->clip_rect.x; + right = dst->clip_rect.x + dst->clip_rect.w - 1; + top = dst->clip_rect.y; + bottom = dst->clip_rect.y + dst->clip_rect.h - 1; + + /* + * Check visibility of vline + */ + if ((x<left) || (x>right)) { + return (0); + } + if ((y1<top) && (y2<top)) { + return(0); + } + if ((y1>bottom) && (y2>bottom)) { + return(0); + } + + /* + * Clip y + */ + if (y1 < top) { + y1 = top; + } + if (y2 > bottom) { + y2 = bottom; + } + + /* + * Swap y1, y2 if required + */ + if (y1 > y2) { + ytmp = y1; + y1 = y2; + y2 = ytmp; + } + + /* + * Calculate height + */ + h = y2 - y1; + + /* + * Sanity check on height + */ + if (h < 0) { + return (0); + } + + /* + * Alpha check + */ + if ((color & 255) == 255) { + + /* + * No alpha-blending required + */ + + /* + * Setup color + */ + colorptr = (Uint8 *) & color; + if (SDL_BYTEORDER == SDL_BIG_ENDIAN) { + color = SDL_MapRGBA(dst->format, colorptr[0], colorptr[1], colorptr[2], colorptr[3]); + } else { + color = SDL_MapRGBA(dst->format, colorptr[3], colorptr[2], colorptr[1], colorptr[0]); + } + + /* + * Lock surface + */ + SDL_LockSurface(dst); + + /* + * More variable setup + */ + dy = h; + pixx = dst->format->BytesPerPixel; + pixy = dst->pitch; + pixel = ((Uint8 *) dst->pixels) + pixx * (int) x + pixy * (int) y1; + pixellast = pixel + pixy * dy; + + /* + * Draw + */ + switch (dst->format->BytesPerPixel) { + case 1: + for (; pixel <= pixellast; pixel += pixy) { + *(Uint8 *) pixel = color; + } + break; + case 2: + for (; pixel <= pixellast; pixel += pixy) { + *(Uint16 *) pixel = color; + } + break; + case 3: + for (; pixel <= pixellast; pixel += pixy) { + if (SDL_BYTEORDER == SDL_BIG_ENDIAN) { + pixel[0] = (color >> 16) & 0xff; + pixel[1] = (color >> 8) & 0xff; + pixel[2] = color & 0xff; + } else { + pixel[0] = color & 0xff; + pixel[1] = (color >> 8) & 0xff; + pixel[2] = (color >> 16) & 0xff; + } + } + break; + default: /* case 4 */ + for (; pixel <= pixellast; pixel += pixy) { + *(Uint32 *) pixel = color; + } + break; + } + + /* + * Unlock surface + */ + SDL_UnlockSurface(dst); + + /* + * Set result code + */ + result = 0; + + } else { + + /* + * Alpha blending blit + */ + + result = VLineAlpha(dst, x, y1, y1 + h, color); + + } + + return (result); +} + +int vlineRGBA(SDL_Surface * dst, Sint16 x, Sint16 y1, Sint16 y2, Uint8 r, Uint8 g, Uint8 b, Uint8 a) +{ + /* + * Draw + */ + return (vlineColor(dst, x, y1, y2, ((Uint32) r << 24) | ((Uint32) g << 16) | ((Uint32) b << 8) | (Uint32) a)); +} + +/* ----- Rectangle */ + +int rectangleColor(SDL_Surface * dst, Sint16 x1, Sint16 y1, Sint16 x2, Sint16 y2, Uint32 color) +{ + int result; + Sint16 w, h, xtmp, ytmp; + + /* + * Swap x1, x2 if required + */ + if (x1 > x2) { + xtmp = x1; + x1 = x2; + x2 = xtmp; + } + + /* + * Swap y1, y2 if required + */ + if (y1 > y2) { + ytmp = y1; + y1 = y2; + y2 = ytmp; + } + + /* + * Calculate width&height + */ + w = x2 - x1; + h = y2 - y1; + + /* + * Sanity check + */ + if ((w < 0) || (h < 0)) { + return (0); + } + + /* + * Test for special cases of straight lines or single point + */ + if (x1 == x2) { + if (y1 == y2) { + return (pixelColor(dst, x1, y1, color)); + } else { + return (vlineColor(dst, x1, y1, y2, color)); + } + } else { + if (y1 == y2) { + return (hlineColor(dst, x1, x2, y1, color)); + } + } + + /* + * Draw rectangle + */ + result = 0; + result |= hlineColor(dst, x1, x2, y1, color); + result |= hlineColor(dst, x1, x2, y2, color); + y1 += 1; + y2 -= 1; + if (y1<=y2) { + result |= vlineColor(dst, x1, y1, y2, color); + result |= vlineColor(dst, x2, y1, y2, color); + } + return (result); + +} + +int rectangleRGBA(SDL_Surface * dst, Sint16 x1, Sint16 y1, Sint16 x2, Sint16 y2, Uint8 r, Uint8 g, Uint8 b, Uint8 a) +{ + /* + * Draw + */ + return (rectangleColor + (dst, x1, y1, x2, y2, ((Uint32) r << 24) | ((Uint32) g << 16) | ((Uint32) b << 8) | (Uint32) a)); +} + +/* --------- Clipping routines for line */ + +/* Clipping based heavily on code from */ +/* http://www.ncsa.uiuc.edu/Vis/Graphics/src/clipCohSuth.c */ + +#define CLIP_LEFT_EDGE 0x1 +#define CLIP_RIGHT_EDGE 0x2 +#define CLIP_BOTTOM_EDGE 0x4 +#define CLIP_TOP_EDGE 0x8 +#define CLIP_INSIDE(a) (!a) +#define CLIP_REJECT(a,b) (a&b) +#define CLIP_ACCEPT(a,b) (!(a|b)) + +static int clipEncode(Sint16 x, Sint16 y, Sint16 left, Sint16 top, Sint16 right, Sint16 bottom) +{ + int code = 0; + + if (x < left) { + code |= CLIP_LEFT_EDGE; + } else if (x > right) { + code |= CLIP_RIGHT_EDGE; + } + if (y < top) { + code |= CLIP_TOP_EDGE; + } else if (y > bottom) { + code |= CLIP_BOTTOM_EDGE; + } + return code; +} + +static int clipLine(SDL_Surface * dst, Sint16 * x1, Sint16 * y1, Sint16 * x2, Sint16 * y2) +{ + Sint16 left, right, top, bottom; + int code1, code2; + int draw = 0; + Sint16 swaptmp; + float m; + + /* + * Get clipping boundary + */ + left = dst->clip_rect.x; + right = dst->clip_rect.x + dst->clip_rect.w - 1; + top = dst->clip_rect.y; + bottom = dst->clip_rect.y + dst->clip_rect.h - 1; + + while (1) { + code1 = clipEncode(*x1, *y1, left, top, right, bottom); + code2 = clipEncode(*x2, *y2, left, top, right, bottom); + if (CLIP_ACCEPT(code1, code2)) { + draw = 1; + break; + } else if (CLIP_REJECT(code1, code2)) + break; + else { + if (CLIP_INSIDE(code1)) { + swaptmp = *x2; + *x2 = *x1; + *x1 = swaptmp; + swaptmp = *y2; + *y2 = *y1; + *y1 = swaptmp; + swaptmp = code2; + code2 = code1; + code1 = swaptmp; + } + if (*x2 != *x1) { + m = (*y2 - *y1) / (float) (*x2 - *x1); + } else { + m = 1.0f; + } + if (code1 & CLIP_LEFT_EDGE) { + *y1 += (Sint16) ((left - *x1) * m); + *x1 = left; + } else if (code1 & CLIP_RIGHT_EDGE) { + *y1 += (Sint16) ((right - *x1) * m); + *x1 = right; + } else if (code1 & CLIP_BOTTOM_EDGE) { + if (*x2 != *x1) { + *x1 += (Sint16) ((bottom - *y1) / m); + } + *y1 = bottom; + } else if (code1 & CLIP_TOP_EDGE) { + if (*x2 != *x1) { + *x1 += (Sint16) ((top - *y1) / m); + } + *y1 = top; + } + } + } + + return draw; +} + +/* ----- Filled rectangle (Box) */ + +int boxColor(SDL_Surface * dst, Sint16 x1, Sint16 y1, Sint16 x2, Sint16 y2, Uint32 color) +{ + Sint16 left, right, top, bottom; + Uint8 *pixel, *pixellast; + int x, dx; + int dy; + int pixx, pixy; + Sint16 w, h, tmp; + int result; + Uint8 *colorptr; + + /* + * Get clipping boundary + */ + left = dst->clip_rect.x; + right = dst->clip_rect.x + dst->clip_rect.w - 1; + top = dst->clip_rect.y; + bottom = dst->clip_rect.y + dst->clip_rect.h - 1; + + /* Check visibility */ + if ((x1<left) && (x2<left)) { + return(0); + } + if ((x1>right) && (x2>right)) { + return(0); + } + if ((y1<top) && (y2<top)) { + return(0); + } + if ((y1>bottom) && (y2>bottom)) { + return(0); + } + + /* Clip all points */ + if (x1<left) { + x1=left; + } else if (x1>right) { + x1=right; + } + if (x2<left) { + x2=left; + } else if (x2>right) { + x2=right; + } + if (y1<top) { + y1=top; + } else if (y1>bottom) { + y1=bottom; + } + if (y2<top) { + y2=top; + } else if (y2>bottom) { + y2=bottom; + } + + /* + * Order coordinates + */ + if (x1 > x2) { + tmp = x1; + x1 = x2; + x2 = tmp; + } + if (y1 > y2) { + tmp = y1; + y1 = y2; + y2 = tmp; + } + + /* + * Test for special cases of straight line or single point + */ + if (x1 == x2) { + if (y1 == y2) { + return (pixelColor(dst, x1, y1, color)); + } else { + return (vlineColor(dst, x1, y1, y2, color)); + } + } + if (y1 == y2) { + return (hlineColor(dst, x1, x2, y1, color)); + } + + + /* + * Calculate width&height + */ + w = x2 - x1; + h = y2 - y1; + + /* + * Alpha check + */ + if ((color & 255) == 255) { + + /* + * No alpha-blending required + */ + + /* + * Setup color + */ + colorptr = (Uint8 *) & color; + if (SDL_BYTEORDER == SDL_BIG_ENDIAN) { + color = SDL_MapRGBA(dst->format, colorptr[0], colorptr[1], colorptr[2], colorptr[3]); + } else { + color = SDL_MapRGBA(dst->format, colorptr[3], colorptr[2], colorptr[1], colorptr[0]); + } + + /* + * Lock surface + */ + SDL_LockSurface(dst); + + /* + * More variable setup + */ + dx = w; + dy = h; + pixx = dst->format->BytesPerPixel; + pixy = dst->pitch; + pixel = ((Uint8 *) dst->pixels) + pixx * (int) x1 + pixy * (int) y1; + pixellast = pixel + pixx * dx + pixy * dy; + dx++; + + /* + * Draw + */ + switch (dst->format->BytesPerPixel) { + case 1: + for (; pixel <= pixellast; pixel += pixy) { + memset(pixel, (Uint8) color, dx); + } + break; + case 2: + pixy -= (pixx * dx); + for (; pixel <= pixellast; pixel += pixy) { + for (x = 0; x < dx; x++) { + *(Uint16 *) pixel = color; + pixel += pixx; + } + } + break; + case 3: + pixy -= (pixx * dx); + for (; pixel <= pixellast; pixel += pixy) { + for (x = 0; x < dx; x++) { + if (SDL_BYTEORDER == SDL_BIG_ENDIAN) { + pixel[0] = (color >> 16) & 0xff; + pixel[1] = (color >> 8) & 0xff; + pixel[2] = color & 0xff; + } else { + pixel[0] = color & 0xff; + pixel[1] = (color >> 8) & 0xff; + pixel[2] = (color >> 16) & 0xff; + } + pixel += pixx; + } + } + break; + default: /* case 4 */ + pixy -= (pixx * dx); + for (; pixel <= pixellast; pixel += pixy) { + for (x = 0; x < dx; x++) { + *(Uint32 *) pixel = color; + pixel += pixx; + } + } + break; + } + + /* + * Unlock surface + */ + SDL_UnlockSurface(dst); + + result = 0; + + } else { + + result = filledRectAlpha(dst, x1, y1, x1 + w, y1 + h, color); + + } + + return (result); +} + +int boxRGBA(SDL_Surface * dst, Sint16 x1, Sint16 y1, Sint16 x2, Sint16 y2, Uint8 r, Uint8 g, Uint8 b, Uint8 a) +{ + /* + * Draw + */ + return (boxColor(dst, x1, y1, x2, y2, ((Uint32) r << 24) | ((Uint32) g << 16) | ((Uint32) b << 8) | (Uint32) a)); +} + +/* ----- Line */ + +/* Non-alpha line drawing code adapted from routine */ +/* by Pete Shinners, pe...@sh... */ +/* Originally from pygame, http://pygame.seul.org */ + +#define ABS(a) (((a)<0) ? -(a) : (a)) + +int lineColor(SDL_Surface * dst, Sint16 x1, Sint16 y1, Sint16 x2, Sint16 y2, Uint32 color) +{ + int pixx, pixy; + int x, y; + int dx, dy; + int ax, ay; + int sx, sy; + int swaptmp; + Uint8 *pixel; + Uint8 *colorptr; + + /* + * Clip line and test if we h... [truncated message content] |
From: <the...@us...> - 2007-06-12 12:16:35
|
Revision: 30 http://qonk.svn.sourceforge.net/qonk/?rev=30&view=rev Author: thebohemian Date: 2007-06-12 05:16:32 -0700 (Tue, 12 Jun 2007) Log Message: ----------- - created input-abstraction branch Added Paths: ----------- branches/input-abstraction-2007-06-12/ branches/input-abstraction-2007-06-12/Makefile.am branches/input-abstraction-2007-06-12/autogen.sh branches/input-abstraction-2007-06-12/config.h.in branches/input-abstraction-2007-06-12/configure.ac branches/input-abstraction-2007-06-12/data/ branches/input-abstraction-2007-06-12/src/ Removed Paths: ------------- branches/input-abstraction-2007-06-12/Makefile branches/input-abstraction-2007-06-12/ReadConf.cpp branches/input-abstraction-2007-06-12/ReadConf.h branches/input-abstraction-2007-06-12/actions.cpp branches/input-abstraction-2007-06-12/actions.h branches/input-abstraction-2007-06-12/animations.cpp branches/input-abstraction-2007-06-12/animations.h branches/input-abstraction-2007-06-12/config.cpp branches/input-abstraction-2007-06-12/config.h branches/input-abstraction-2007-06-12/coordinate.cpp branches/input-abstraction-2007-06-12/coordinate.h branches/input-abstraction-2007-06-12/extensions.cpp branches/input-abstraction-2007-06-12/extensions.h branches/input-abstraction-2007-06-12/font.ttf branches/input-abstraction-2007-06-12/fonts.cpp branches/input-abstraction-2007-06-12/fonts.h branches/input-abstraction-2007-06-12/main.cpp branches/input-abstraction-2007-06-12/messages.cpp branches/input-abstraction-2007-06-12/messages.h branches/input-abstraction-2007-06-12/planets.cpp branches/input-abstraction-2007-06-12/planets.h branches/input-abstraction-2007-06-12/players.cpp branches/input-abstraction-2007-06-12/players.h branches/input-abstraction-2007-06-12/selection.cpp branches/input-abstraction-2007-06-12/selection.h branches/input-abstraction-2007-06-12/ships.cpp branches/input-abstraction-2007-06-12/ships.h branches/input-abstraction-2007-06-12/stars.cpp branches/input-abstraction-2007-06-12/stars.h branches/input-abstraction-2007-06-12/timer.cpp branches/input-abstraction-2007-06-12/timer.h branches/input-abstraction-2007-06-12/universe.cpp branches/input-abstraction-2007-06-12/universe.h Copied: branches/input-abstraction-2007-06-12 (from rev 25, trunk) Deleted: branches/input-abstraction-2007-06-12/Makefile =================================================================== --- trunk/Makefile 2007-06-12 11:18:17 UTC (rev 25) +++ branches/input-abstraction-2007-06-12/Makefile 2007-06-12 12:16:32 UTC (rev 30) @@ -1,59 +0,0 @@ -PREFIX=/home/rob/INSTALL/qonk -BIN=/home/rob/INSTALL/qonk/bin - -CXX=g++ -CFLAGS=`sdl-config --cflags` -O3 -LIBS=`sdl-config --libs` -lSDL_ttf -lSDL_gfx - -WCC=i586-mingw32msvc-g++ -WC=i586-mingw32msvc-gcc -WCFLAGS=-c -WLDFLAGS=-lmingw32 -lSDLmain -lSDL -lSDL_ttf -lSDL_gfx -WLIBS=-lmingw32 -lSDLmain -lSDL -lSDL_ttf -lSDL_gfx - -OBJECTS=extensions.o coordinate.o stars.o planets.o selection.o ships.o main.o actions.o players.o universe.o animations.o fonts.o messages.o timer.o config.o ReadConf.o - -all: qonk - -qonk: $(OBJECTS) - $(CXX) $(CFLAGS) $(LIBS) $(OBJECTS) -o qonk - -windows: wob - $(WCC) $(WLDFLAGS) $(OBJECTS) -o qonk.exe $(WLIBS) - -wob: - $(WCC) $(WCFLAGS) *.cpp - -.cpp.o: - $(CXX) $(CFLAGS) -c $< - -clean: - @rm -vf *.o *~ qonk screenshot.bmp DEADJOE - -dist: clean - mkdir -p qonk/ - cp *.cpp qonk/ - cp *.h qonk/ - cp Makefile qonk/ - cp TODO qonk/ - cp README qonk/ - cp COPYING qonk/ - cp font.ttf qonk/ - cp qonk.conf qonk/ - tar -cvzf ../qonk.tar.gz qonk/ - rm -rf qonk/ - -install: all - mkdir -p $(PREFIX)/qonk - mkdir -p $(BIN) - cp qonk $(PREFIX)/qonk/ - cp font.ttf $(PREFIX)/qonk/ - cp qonk.conf $(PREFIX)/qonk/ - echo "cd $(PREFIX)/qonk" > $(BIN)/qonk - echo "./qonk" >> $(BIN)/qonk - chmod +x $(BIN)/qonk - - -uninstall: - rm -rf $(PREFIX)/qonk - rm $(BIN)/qonk Copied: branches/input-abstraction-2007-06-12/Makefile.am (from rev 26, trunk/Makefile.am) =================================================================== --- branches/input-abstraction-2007-06-12/Makefile.am (rev 0) +++ branches/input-abstraction-2007-06-12/Makefile.am 2007-06-12 12:16:32 UTC (rev 30) @@ -0,0 +1,4 @@ +SUBDIRS = src data + +EXTRA_DIST = README COPYING missing Makefile.manual TODO + Deleted: branches/input-abstraction-2007-06-12/ReadConf.cpp =================================================================== --- trunk/ReadConf.cpp 2007-06-12 11:18:17 UTC (rev 25) +++ branches/input-abstraction-2007-06-12/ReadConf.cpp 2007-06-12 12:16:32 UTC (rev 30) @@ -1,91 +0,0 @@ -#include "ReadConf.h" - -Config::Config( const std::string& configFileName ){ - std::ifstream file( configFileName.c_str() ); - while (!file.eof()){ - std::string line; - getline( file, line ); - std::string::size_type loc = line.find( "=", 0 ); - if( line[0] != '#' ) - if( loc != std::string::npos ) { - std::string parameter = stripWhiteSpace( line.substr( 0, loc ) ); - std::string value = stripWhiteSpace( line.substr( loc + 1 ) ); - data[ parameter ] = value; - } - } - file.close(); - std::cout << "config file read" << std::endl; -} - -std::string -Config::getValue( const std::string& parameter ) const { - std::map< std::string, std::string >::const_iterator i = data.find( parameter ); - if( i != data.end() ) - return i->second; - else - return ""; -} - -bool -Config::getValueBOOL( const std::string& parameter ) const { - std::string s = getValue(parameter); - return str2bool(s); -} - -int -Config::getValueINT( const std::string& parameter ) const { - std::string s = getValue(parameter); - return str2int(s); -} - -void -Config::print() const { - for( std::map< std::string, std::string >::const_iterator i = data.begin(); i != data.end(); i++ ) - std::cout << "'" << i->first << "' => '" << i->second << "'" << std::endl; -} - -bool -fileExists( const std::string& fileName ) { - std::ifstream infile( fileName.c_str() ); - bool result = infile.good(); - infile.close(); - return result; -} - -void -createFile( const std::string& fileName, std::vector< std::string > content ){ - if( !fileExists( fileName ) ){ - std::ofstream outfile( fileName.c_str() ); - for( std::vector< std::string >::const_iterator iter = content.begin(); iter != content.end(); iter++ ) { - outfile.write( (*iter).data(), (*iter).size() ); - outfile.write( "\n", 1 ); - } - outfile.close(); - } -} - -bool -str2bool( const std::string& s ) { - if (s == std::string("true")) { - return true; - } else if (s == std::string("false")){ - return false; - } else { - std::cerr << "Invalid bool type"; - } -} - -int -str2int( const std::string& s ) { - std::istringstream i(s); - int x; - i>>x; - return x; -} - -std::string -stripWhiteSpace( const std::string& original ) { - int begin = original.find_first_not_of( " " ); - int end = original.find_last_not_of( " " ); - return original.substr( begin, end - begin + 1 ); -} Deleted: branches/input-abstraction-2007-06-12/ReadConf.h =================================================================== --- trunk/ReadConf.h 2007-06-12 11:18:17 UTC (rev 25) +++ branches/input-abstraction-2007-06-12/ReadConf.h 2007-06-12 12:16:32 UTC (rev 30) @@ -1,36 +0,0 @@ -// ReadConf.h -// Class for reading named values from configuration files -// Troels Kofoed Jacobsen, Mar 19 2007, tkj...@gm... -// Licensed under GPLv2 -#ifndef READCONF_H -#define READCONF_H - -#include <string> -#include <map> -#include <vector> -#include <fstream> -#include <iostream> -#include <cctype> -#include <sstream> - -class Config { -public: - Config( const std::string& fileName ); - - std::string getValue( const std::string& parameter ) const; - bool getValueBOOL( const std::string& parameter ) const; - int getValueINT( const std::string& parameter ) const; - - void print() const; - -private: - std::map< std::string, std::string > data; -}; - -bool fileExists( const std::string& ); -void createFile( const std::string&, std::vector< std::string > ); -bool str2bool(const std::string& ); -int str2int(const std::string& ); -std::string stripWhiteSpace( const std::string& ); - -#endif Deleted: branches/input-abstraction-2007-06-12/actions.cpp =================================================================== --- trunk/actions.cpp 2007-06-12 11:18:17 UTC (rev 25) +++ branches/input-abstraction-2007-06-12/actions.cpp 2007-06-12 12:16:32 UTC (rev 30) @@ -1,74 +0,0 @@ -// Copyright 2005 by Anthony Liekens an...@li... - -#include "actions.h" - -#include "config.h" -#include <iostream> - -// ##### ACTION ##### - -Action::Action() { - actionID = 0; -} - -void -Action::setActionQueue( ActionQueue* actionQueue ) { - this->actionQueue = actionQueue; -} - -ActionQueue* -Action::getActionQueue() const { - return actionQueue; -} - -// ##### ACTIONQUEUE ##### - -ActionQueue::ActionQueue() { - clear(); - time = 0; -} - -void -ActionQueue::scheduleAction( Uint32 time, Action* action ) { - if( this->time > time ) { - std::cerr << "Action was inserted before action that has already been executed" << endl; - } - action->setActionQueue( this ); - insert( pair< Uint32, Action* >( time, action ) ); -} - -Uint32 -ActionQueue::timeOfNextEvent() { - return this->begin()->first; -} - -void -ActionQueue::executeNextEvent() { - time = this->begin()->first; - Action* a = this->begin()->second; -// if( time > timer.getTime() ) { -// SDL_Delay( time - timer.getTime() ); -// } - a->execute( time ); - erase( this->begin() ); - delete a; -} - -void -ActionQueue::executeAllEvents() { - while( size() > 0 ) { - executeNextEvent(); - } -} - -void ActionQueue::executeEventsBefore( Uint32 time ) { - while( ( size() > 0 ) && ( timeOfNextEvent() < time ) ) { - executeNextEvent(); - } -} - -void -ActionQueue::executePastEvents() { - executeEventsBefore( timer.getTime() ); -} - Deleted: branches/input-abstraction-2007-06-12/actions.h =================================================================== --- trunk/actions.h 2007-06-12 11:18:17 UTC (rev 25) +++ branches/input-abstraction-2007-06-12/actions.h 2007-06-12 12:16:32 UTC (rev 30) @@ -1,41 +0,0 @@ -// Copyright 2005 by Anthony Liekens an...@li... - -#ifndef ACTIONS_H -#define ACTIONS_H - -#include <SDL/SDL.h> -#include <map> -using namespace std; - -class ActionQueue; - -class Action { -private: - ActionQueue* actionQueue; -protected: - int actionID; -public: - Action(); - virtual void execute( const Uint32& time ) = 0; - virtual ~Action() {} - void setActionQueue( ActionQueue* actionQueue ); - ActionQueue* getActionQueue() const; - int getActionID() { return actionID; } -}; - -class ActionQueue : public multimap< Uint32, Action* > { -private: - Uint32 time; -public: - ActionQueue(); - void scheduleAction( Uint32 time, Action* action ); - - Uint32 timeOfNextEvent(); - - void executeNextEvent(); - void executeAllEvents(); - void executeEventsBefore( Uint32 time ); - void executePastEvents(); -}; - -#endif Deleted: branches/input-abstraction-2007-06-12/animations.cpp =================================================================== --- trunk/animations.cpp 2007-06-12 11:18:17 UTC (rev 25) +++ branches/input-abstraction-2007-06-12/animations.cpp 2007-06-12 12:16:32 UTC (rev 30) @@ -1,40 +0,0 @@ -// Copyright 2005 by Anthony Liekens an...@li... - -#include "animations.h" -#include <SDL_gfxPrimitives.h> - -#include <iostream> - -void -AnimationQueue::render( SDL_Surface* screen ) { - for( iterator i = begin(); i != end(); i++ ) { - Animation* animation = (Animation*)( i->second ); - animation->render( screen ); - } -} - -SonarAnimation::SonarAnimation() { -} - -SonarAnimation::SonarAnimation( Planet* planet, const Uint32& color, const int& size, const Uint32& startTime, const Uint32& endTime, bool circle ) { - this->circle = circle; - this->planet = planet; - r = ( color & 0xFF0000 ) >> 16; - g = ( color & 0x00FF00 ) >> 8; - b = ( color & 0x0000FF ); -// this->color = color; - this->size = size; - this->startTime = startTime; - this->endTime = endTime; -} - -void -SonarAnimation::render( SDL_Surface* screen ) { - Uint32 currentTime = timer.getTime(); - if( ( currentTime > startTime ) && ( currentTime < endTime ) ) { - double percentage = (double)( currentTime - startTime ) / ( endTime - startTime ); - filledCircleRGBA( screen, planet->getLocation().getXMapped(), planet->getLocation().getYMapped(), (int)( size * sin( percentage * PI ) ), r, g, b, (int)( ( 255 - 255 * percentage ) * 0.05 ) ); - if( circle ) - aacircleRGBA( screen, planet->getLocation().getXMapped(), planet->getLocation().getYMapped(), (int)( size * sin( percentage * PI ) ), r, g, b, 255 - (int)( 255 * percentage ) ); - } -} Deleted: branches/input-abstraction-2007-06-12/animations.h =================================================================== --- trunk/animations.h 2007-06-12 11:18:17 UTC (rev 25) +++ branches/input-abstraction-2007-06-12/animations.h 2007-06-12 12:16:32 UTC (rev 30) @@ -1,39 +0,0 @@ -// Copyright 2005 by Anthony Liekens an...@li... - -#ifndef ANIMATIONS_H -#define ANIMATIONS_H - -#include "actions.h" -#include "coordinate.h" -#include "config.h" -#include "planets.h" - -#include <math.h> - -class Planet; - -class Animation : public Action { -public: - void execute( const Uint32& time ) {} - virtual void render( SDL_Surface* screen ) = 0; -}; - -class AnimationQueue : public ActionQueue { -public: - void render( SDL_Surface* screen ); -}; - -class SonarAnimation : public Animation { -private: - bool circle; - Planet* planet; - Uint32 startTime, endTime; - Uint8 r, g, b; - int size; -public: - SonarAnimation(); - SonarAnimation( Planet* planet, const Uint32& color, const int& size, const Uint32& startTime, const Uint32& endTime, bool circle = false ); - void render( SDL_Surface* screen ); -}; - -#endif Copied: branches/input-abstraction-2007-06-12/autogen.sh (from rev 26, trunk/autogen.sh) =================================================================== --- branches/input-abstraction-2007-06-12/autogen.sh (rev 0) +++ branches/input-abstraction-2007-06-12/autogen.sh 2007-06-12 12:16:32 UTC (rev 30) @@ -0,0 +1,3 @@ +#!/bin/sh + +aclocal && automake --foreign --add-missing --copy && autoheader && autoconf Deleted: branches/input-abstraction-2007-06-12/config.cpp =================================================================== --- trunk/config.cpp 2007-06-12 11:18:17 UTC (rev 25) +++ branches/input-abstraction-2007-06-12/config.cpp 2007-06-12 12:16:32 UTC (rev 30) @@ -1,76 +0,0 @@ -// Copyright 2005 by Anthony Liekens an...@li... - -#include "config.h" -#include <iostream> - -class Config; - -Settings::Settings() { - //setResolution( 800, 600 ); - //setFullscreen( true ); - - //Create configuration file if it does not exist - if (!fileExists("qonk.conf")){ - vector<string> v; - v.push_back("# Qonk configuration file "); - v.push_back("# Format: entry = value (The spaces is optional)\n"); - v.push_back("# Window"); - v.push_back("fullscreen = true"); - v.push_back("width = 1024"); - v.push_back("height = 768\n"); - v.push_back("# Settings for first round"); - v.push_back("numberOfPlanets = 6"); - v.push_back("numberOfComputerPlayers = 1"); - createFile("qonk.conf",v); - } - Config config("qonk.conf"); - //Read settings form qonk.conf - bool fs = config.getValueBOOL("fullscreen"); - int h = config.getValueINT("height"); - int w = config.getValueINT("width"); - setResolution(w, h ); - setFullscreen( fs ); -} - -Settings::Settings(int w, int h, bool fs) { - setResolution( w, h ); - setFullscreen( fs ); -} - -void -Settings::setResolution( int width, int height ) { - screenWidth = width; - screenHeight = height; - gameWidth = height; - gameHeight = height; - gameOffsetX = ( width - height ) / 2; -} - -void -Settings::setFullscreen( bool b ) { - fullscreen = b; -} - -int Settings::getScreenWidth() { - return screenWidth; -} - -int Settings::getScreenHeight() { - return screenHeight; -} - -int Settings::getGameWidth() { - return gameWidth; -} - -int Settings::getGameHeight() { - return gameHeight; -} - -int Settings::getGameOffsetX() { - return gameOffsetX; -} - -bool Settings::getFullscreen() { - return fullscreen; -} Deleted: branches/input-abstraction-2007-06-12/config.h =================================================================== --- trunk/config.h 2007-06-12 11:18:17 UTC (rev 25) +++ branches/input-abstraction-2007-06-12/config.h 2007-06-12 12:16:32 UTC (rev 30) @@ -1,35 +0,0 @@ -// Copyright 2005 by Anthony Liekens an...@li... - -#ifndef CONFIG_H -#define CONFIG_H - -#define PI 3.14159265 - -#include "timer.h" -#include "ReadConf.h" -#include <vector> -#include <string> - -static Timer timer; - -class Settings { -private: - int screenWidth, screenHeight, gameWidth, gameHeight, gameOffsetX; - bool fullscreen; -public: - Settings(); - Settings(int, int, bool); - void setResolution( int width, int height ); - void setFullscreen( bool b ); - int getScreenWidth(); - int getScreenHeight(); - int getGameWidth(); - int getGameHeight(); - int getGameOffsetX(); - bool getFullscreen(); -}; - -static Settings settings; -//static Config config("qonk.conf"); - -#endif Copied: branches/input-abstraction-2007-06-12/config.h.in (from rev 26, trunk/config.h.in) =================================================================== --- branches/input-abstraction-2007-06-12/config.h.in (rev 0) +++ branches/input-abstraction-2007-06-12/config.h.in 2007-06-12 12:16:32 UTC (rev 30) @@ -0,0 +1,106 @@ +/* config.h.in. Generated from configure.ac by autoheader. */ + +/* Define to 1 if you have the `atexit' function. */ +#undef HAVE_ATEXIT + +/* Define to 1 if you have the <inttypes.h> header file. */ +#undef HAVE_INTTYPES_H + +/* Define to 1 if you have the `SDL' library (-lSDL). */ +#undef HAVE_LIBSDL + +/* Define to 1 if you have the `SDL_gfx' library (-lSDL_gfx). */ +#undef HAVE_LIBSDL_GFX + +/* Define to 1 if you have the `SDL_ttf' library (-lSDL_ttf). */ +#undef HAVE_LIBSDL_TTF + +/* Define to 1 if you have the <memory.h> header file. */ +#undef HAVE_MEMORY_H + +/* Define to 1 if you have the `mkdir' function. */ +#undef HAVE_MKDIR + +/* Define to 1 if you have the <SDL/SDL_gfxPrimitives.h> header file. */ +#undef HAVE_SDL_SDL_GFXPRIMITIVES_H + +/* Define to 1 if you have the <SDL/SDL.h> header file. */ +#undef HAVE_SDL_SDL_H + +/* Define to 1 if you have the <SDL/SDL_ttf.h> header file. */ +#undef HAVE_SDL_SDL_TTF_H + +/* Define to 1 if you have the `select' function. */ +#undef HAVE_SELECT + +/* Define to 1 if you have the `sqrt' function. */ +#undef HAVE_SQRT + +/* Define to 1 if stdbool.h conforms to C99. */ +#undef HAVE_STDBOOL_H + +/* Define to 1 if you have the <stdint.h> header file. */ +#undef HAVE_STDINT_H + +/* Define to 1 if you have the <stdlib.h> header file. */ +#undef HAVE_STDLIB_H + +/* Define to 1 if you have the <strings.h> header file. */ +#undef HAVE_STRINGS_H + +/* Define to 1 if you have the <string.h> header file. */ +#undef HAVE_STRING_H + +/* Define to 1 if you have the <sys/select.h> header file. */ +#undef HAVE_SYS_SELECT_H + +/* Define to 1 if you have the <sys/socket.h> header file. */ +#undef HAVE_SYS_SOCKET_H + +/* Define to 1 if you have the <sys/stat.h> header file. */ +#undef HAVE_SYS_STAT_H + +/* Define to 1 if you have the <sys/types.h> header file. */ +#undef HAVE_SYS_TYPES_H + +/* Define to 1 if you have the <unistd.h> header file. */ +#undef HAVE_UNISTD_H + +/* Define to 1 if the system has the type `_Bool'. */ +#undef HAVE__BOOL + +/* Name of package */ +#undef PACKAGE + +/* Define to the address where bug reports for this package should be sent. */ +#undef PACKAGE_BUGREPORT + +/* Define to the full name of this package. */ +#undef PACKAGE_NAME + +/* Define to the full name and version of this package. */ +#undef PACKAGE_STRING + +/* Define to the one symbol short name of this package. */ +#undef PACKAGE_TARNAME + +/* Define to the version of this package. */ +#undef PACKAGE_VERSION + +/* Define to the type of arg 1 for `select'. */ +#undef SELECT_TYPE_ARG1 + +/* Define to the type of args 2, 3 and 4 for `select'. */ +#undef SELECT_TYPE_ARG234 + +/* Define to the type of arg 5 for `select'. */ +#undef SELECT_TYPE_ARG5 + +/* Define to 1 if you have the ANSI C header files. */ +#undef STDC_HEADERS + +/* Version number of package */ +#undef VERSION + +/* Define to empty if `const' does not conform to ANSI C. */ +#undef const Copied: branches/input-abstraction-2007-06-12/configure.ac (from rev 26, trunk/configure.ac) =================================================================== --- branches/input-abstraction-2007-06-12/configure.ac (rev 0) +++ branches/input-abstraction-2007-06-12/configure.ac 2007-06-12 12:16:32 UTC (rev 30) @@ -0,0 +1,42 @@ +# -*- Autoconf -*- +# Process this file with autoconf to produce a configure script. + +AC_PREREQ(2.61) +AC_INIT([qonk], [0.0.3], [qon...@li...]) +AC_CANONICAL_TARGET +AM_INIT_AUTOMAKE + +AC_CONFIG_SRCDIR([src/animations.h]) +AC_CONFIG_HEADER([config.h]) + +# Checks for programs. +AC_PROG_CXX +AC_PROG_CC + +AC_LANG_C + +AM_PATH_SDL([1.2.0], [:], + AC_MSG_ERROR([No proper SDL found. Please install at least version 1.2.0!])) + + +# Checks for libraries. +AC_CHECK_LIB([SDL], [SDL_Init]) +AC_CHECK_LIB([SDL_ttf], [TTF_Init], ,AC_MSG_ERROR([SDL_ttf missing. Please install at least version 2.0!])) +AC_CHECK_LIB([SDL_gfx], [pixelColor], ,AC_MSG_ERROR([SDL_gfx missing. Please install at least version 1.2!])) + +# Checks for header files. +AC_HEADER_STDC +AC_CHECK_HEADERS([stdlib.h SDL/SDL.h SDL/SDL_gfxPrimitives.h SDL/SDL_ttf.h]) + +# Checks for typedefs, structures, and compiler characteristics. +AC_HEADER_STDBOOL +AC_C_CONST + +# Checks for library functions. +AC_FUNC_SELECT_ARGTYPES +AC_CHECK_FUNCS([atexit mkdir select sqrt]) + +AC_CONFIG_FILES([Makefile + data/Makefile + src/Makefile]) +AC_OUTPUT Deleted: branches/input-abstraction-2007-06-12/coordinate.cpp =================================================================== --- trunk/coordinate.cpp 2007-06-12 11:18:17 UTC (rev 25) +++ branches/input-abstraction-2007-06-12/coordinate.cpp 2007-06-12 12:16:32 UTC (rev 30) @@ -1,64 +0,0 @@ -// Copyright 2005 by Anthony Liekens an...@li... - -#include "coordinate.h" - -#include "config.h" -#include <math.h> - -Coordinate::Coordinate() { - x = 0; - y = 0; -} - -Coordinate::Coordinate( double x, double y ) { - this->x = x; - this->y = y; -} - -void -Coordinate::setX( double x ) { - this->x = x; -} - -void -Coordinate::setY( double y ) { - this->y = y; -} - -void -Coordinate::setXMapped( int x ) { - this->x = ( (double)x - settings.getGameOffsetX() ) / settings.getGameWidth(); -} - -void -Coordinate::setYMapped( int y ) { - this->y = (double)y / settings.getGameHeight(); -} - -double -Coordinate::getX() const { - return x; -} - -double -Coordinate::getY() const { - return y; -} - -int -Coordinate::getXMapped() const { - return settings.getGameOffsetX() + ( int )( settings.getGameWidth() * x ); -} - -int -Coordinate::getYMapped() const { - return ( int )( settings.getGameHeight() * y ); -} - -double -Coordinate::distance( const Coordinate& c ) const { - double dx = c.getX() - getX(); - double dy = c.getY() - getY(); - return sqrt( dx * dx + dy * dy ); -} - Deleted: branches/input-abstraction-2007-06-12/coordinate.h =================================================================== --- trunk/coordinate.h 2007-06-12 11:18:17 UTC (rev 25) +++ branches/input-abstraction-2007-06-12/coordinate.h 2007-06-12 12:16:32 UTC (rev 30) @@ -1,27 +0,0 @@ -// Copyright 2005 by Anthony Liekens an...@li... - -#ifndef COORDINATE_H -#define COORDINATE_H - -class Coordinate { -private: - double x, y; -public: - Coordinate(); - Coordinate( double x, double y ); - - void setX( double x ); - void setY( double y ); - void setXMapped( int x ); - void setYMapped( int y ); - - double getX() const; - double getY() const; - int getXMapped() const; - int getYMapped() const; - - double distance( const Coordinate& c ) const; - -}; - -#endif Copied: branches/input-abstraction-2007-06-12/data (from rev 26, trunk/data) Deleted: branches/input-abstraction-2007-06-12/extensions.cpp =================================================================== --- trunk/extensions.cpp 2007-06-12 11:18:17 UTC (rev 25) +++ branches/input-abstraction-2007-06-12/extensions.cpp 2007-06-12 12:16:32 UTC (rev 30) @@ -1,135 +0,0 @@ -// Copyright 2005 by Anthony Liekens an...@li... - -#include "extensions.h" -#include <SDL_gfxPrimitives.h> - -void -alphaBlend( SDL_Surface* surface, Uint8 alpha ) { - if( alpha == 0 ) { - for( int x = 0; x < surface->w; x++ ) - for( int y = 0; y < surface->h; y++ ) { - Uint32 *bufp; - bufp = (Uint32 *)surface->pixels + y*surface->pitch/4 + x; - if( *bufp != 0 ) - *bufp &= 0x00ffffff; - } - } if( alpha != 255 ) { - for( int x = 0; x < surface->w; x++ ) - for( int y = 0; y < surface->h; y++ ) { - Uint32 *bufp; - bufp = (Uint32 *)surface->pixels + y*surface->pitch/4 + x; - if( *bufp != 0 ) { - // seperate RGB from A, update A for new value, OR them together again - Uint32 color = ( *bufp & 0x00ffffff ) | ( ( *bufp >> 24 ) * alpha >> 8 ) << 24; - *bufp = color; - } - } - } -} - -void -drawSelector( SDL_Surface *screen, Sint16 x1, Sint16 y1, Sint16 width, Sint16 height, Uint8 R, Uint8 G, Uint8 B ) { - hlineRGBA( screen, x1, x1 + 2, y1, R, G, B, 255 ); - hlineRGBA( screen, x1 + width - 2, x1 + width, y1, R, G, B, 255 ); - hlineRGBA( screen, x1, x1 + 2, y1 + height, R, G, B, 255 ); - hlineRGBA( screen, x1 + width - 2, x1 + width, y1 + height, R, G, B, 255 ); - vlineRGBA( screen, x1, y1, y1 + 2, R, G, B, 255 ); - vlineRGBA( screen, x1, y1 + height, y1 + height - 2, R, G, B, 255 ); - vlineRGBA( screen, x1 + width, y1, y1 + 2, R, G, B, 255 ); - vlineRGBA( screen, x1 + width, y1 + height, y1 + height - 2, R, G, B, 255 ); -} - -void -drawPlanet( SDL_Surface* screen, Sint16 x, Sint16 y, int size, Uint8 R, Uint8 G, Uint8 B ) { - filledCircleRGBA( screen, x, y, size + 2, 0, 0, 0, 128 ); - filledCircleRGBA( screen, x, y, size, R, G, B, 255 ); - aacircleRGBA( screen, x, y, size, R, G, B, 255 ); - filledEllipseRGBA( screen, x, y - size / 2, size, size / 2, 255 - 4 * ( 255 - R ) / 5, 255 - 4 * ( 255 - G ) / 5, 255 - 4 * ( 255 - B ) / 5, 255 ); - aaellipseRGBA( screen, x, y - size / 2, size, size / 2, 255 - 4 * ( 255 - R ) / 5, 255 - 4 * ( 255 - G ) / 5, 255 - 4 * ( 255 - B ) / 5, 255 ); -} - -void -drawPlanet( SDL_Surface* screen, Sint16 x, Sint16 y, int size, Uint32 color ) { - drawPlanet( screen, x, y, size, getRed( color ), getGreen( color ), getBlue( color ) ); -} - -double -frand() { - return (double)rand() / RAND_MAX; -} - -double -frand( double max ) { - return max * frand(); -} - -Uint32 HSVtoRGB( float h, float s, float v ) -{ - int i; - float f, p, q, t, r, g, b; - - if( s == 0 ) { - - // achromatic (grey) - r = g = b = v; - - } else { - - h /= 60; // sector 0 to 5 - i = (int)h; - f = h - i; // factorial part of h - p = v * ( 1 - s ); - q = v * ( 1 - s * f ); - t = v * ( 1 - s * ( 1 - f ) ); - - switch( i ) { - case 0: - r = v; - g = t; - b = p; - break; - case 1: - r = q; - g = v; - b = p; - break; - case 2: - r = p; - g = v; - b = t; - break; - case 3: - r = p; - g = q; - b = v; - break; - case 4: - r = t; - g = p; - b = v; - break; - default: // case 5: - r = v; - g = p; - b = q; - break; - } - - } - - return 256 * 256 * (int)( 255 * r ) + 256 * (int)( 255 * g ) + (int)( 255 * b ); - -} - -Uint8 getRed( Uint32 color ) { - return ( color & 0xFF0000 ) >> 16; -} - -Uint8 getGreen( Uint32 color ) { - return ( color & 0x00FF00 ) >> 8; -} - -Uint8 getBlue( Uint32 color ) { - return color & 0x0000FF; -} - Deleted: branches/input-abstraction-2007-06-12/extensions.h =================================================================== --- trunk/extensions.h 2007-06-12 11:18:17 UTC (rev 25) +++ branches/input-abstraction-2007-06-12/extensions.h 2007-06-12 12:16:32 UTC (rev 30) @@ -1,24 +0,0 @@ -// Copyright 2005 by Anthony Liekens an...@li... - -#ifndef EXTENSIONS_H -#define EXTENSIONS_H - -#include "config.h" -#include <SDL/SDL.h> -#include <sstream> -using namespace std; - -void alphaBlend( SDL_Surface* surface, Uint8 alpha ); - -void drawSelector( SDL_Surface *screen, Sint16 x1, Sint16 y1, Sint16 width, Sint16 height, Uint8 R, Uint8 G, Uint8 B ); -void drawPlanet( SDL_Surface* screen, Sint16 x, Sint16 y, int size, Uint8 R, Uint8 G, Uint8 B ); -void drawPlanet( SDL_Surface* screen, Sint16 x, Sint16 y, int size, Uint32 color ); -double frand(); -double frand( double max ); -Uint32 HSVtoRGB( float h, float s, float v ); - -Uint8 getRed( Uint32 color ); -Uint8 getGreen( Uint32 color ); -Uint8 getBlue( Uint32 color ); - -#endif Deleted: branches/input-abstraction-2007-06-12/font.ttf =================================================================== (Binary files differ) Deleted: branches/input-abstraction-2007-06-12/fonts.cpp =================================================================== --- trunk/fonts.cpp 2007-06-12 11:18:17 UTC (rev 25) +++ branches/input-abstraction-2007-06-12/fonts.cpp 2007-06-12 12:16:32 UTC (rev 30) @@ -1,67 +0,0 @@ -// Copyright 2005 by Anthony Liekens an...@li... - -#include "fonts.h" - -#include "extensions.h" - -Font::Font( char* fileName, int size ) { - font = TTF_OpenFont( fileName, size ); - if ( font == NULL ) { - cerr << "Couldn't load " << size << "pt font from " << fileName << ": " << SDL_GetError() << endl; - exit( 1 ); - } - TTF_SetFontStyle( font, TTF_STYLE_NORMAL ); -} - -void -Font::render( SDL_Surface* screen, int x, int y, const char* text, Uint8 r, Uint8 g, Uint8 b, Uint8 a ) { - SDL_Color color = { r, g, b, a }; - SDL_Surface* textSurface = TTF_RenderText_Blended( font, text, color ); - if ( textSurface != NULL ) { - SDL_Rect dstrect; - dstrect.x = x; - dstrect.y = y; - dstrect.w = textSurface->w; - dstrect.h = textSurface->h; - alphaBlend( textSurface, a ); - SDL_BlitSurface( textSurface, NULL, screen, &dstrect ); - SDL_FreeSurface( textSurface ); - } -} - -void -Font::renderCenterJustified( SDL_Surface* screen, int x, int y, const char* text, Uint8 r, Uint8 g, Uint8 b, Uint8 a ) { - SDL_Color color = { r, g, b, 0 }; - SDL_Surface* textSurface = TTF_RenderText_Blended( font, text, color ); - if ( textSurface != NULL ) { - SDL_Rect dstrect; - dstrect.x = x - textSurface->w / 2; - dstrect.y = y - textSurface->h / 2; - dstrect.w = textSurface->w; - dstrect.h = textSurface->h; - alphaBlend( textSurface, a ); - SDL_BlitSurface( textSurface, NULL, screen, &dstrect ); - SDL_FreeSurface( textSurface ); - } -} - -void -Font::renderRightJustified( SDL_Surface* screen, int x, int y, const char* text, Uint8 r, Uint8 g, Uint8 b, Uint8 a ) { - SDL_Color color = { r, g, b, 0 }; - SDL_Surface* textSurface = TTF_RenderText_Blended( font, text, color ); - if ( textSurface != NULL ) { - SDL_Rect dstrect; - dstrect.x = x - textSurface->w; - dstrect.y = y; - dstrect.w = textSurface->w; - dstrect.h = textSurface->h; - alphaBlend( textSurface, a ); - SDL_BlitSurface( textSurface, NULL, screen, &dstrect ); - SDL_FreeSurface( textSurface ); - } -} - -int -Font::getHeight() { - return TTF_FontHeight( font ); -} Deleted: branches/input-abstraction-2007-06-12/fonts.h =================================================================== --- trunk/fonts.h 2007-06-12 11:18:17 UTC (rev 25) +++ branches/input-abstraction-2007-06-12/fonts.h 2007-06-12 12:16:32 UTC (rev 30) @@ -1,24 +0,0 @@ -// Copyright 2005 by Anthony Liekens an...@li... - -#ifndef FONTS_H -#define FONTS_H - -#include <SDL/SDL.h> -#include <SDL/SDL_ttf.h> -#include <iostream> -using namespace std; - -class Font { -private: - TTF_Font* font; -public: - Font( char* fileName, int size ); - - void render( SDL_Surface* screen, int x, int y, const char* text, Uint8 r, Uint8 g, Uint8 b, Uint8 a = 255 ); - void renderCenterJustified( SDL_Surface* screen, int x, int y, const char* text, Uint8 r, Uint8 g, Uint8 b, Uint8 a = 255 ); - void renderRightJustified( SDL_Surface* screen, int x, int y, const char* text, Uint8 r, Uint8 g, Uint8 b, Uint8 a = 255 ); - - int getHeight(); -}; - -#endif Deleted: branches/input-abstraction-2007-06-12/main.cpp =================================================================== --- trunk/main.cpp 2007-06-12 11:18:17 UTC (rev 25) +++ branches/input-abstraction-2007-06-12/main.cpp 2007-06-12 12:16:32 UTC (rev 30) @@ -1,318 +0,0 @@ -// Copyright 2005 by Anthony Liekens an...@li... - -#include "coordinate.h" -#include "stars.h" -#include "planets.h" -#include "selection.h" -#include "players.h" -#include "universe.h" -#include "fonts.h" -#include "ReadConf.h" -#include "config.h" - -#include <SDL_gfxPrimitives.h> -#include <SDL/SDL.h> -#include <SDL/SDL_ttf.h> -#include <math.h> - -#include <iostream> -#include <iomanip> -#include <sstream> -#include <vector> -#include <string> -#include <list> - -Font* font; -Uint32 FPStimer, FPScounter; -double FPS; - -enum States { PLAYING, LOST, WON }; -States state; - -void render( SDL_Surface* screen, Universe* universe, Players* players ) { - - boxRGBA( screen, 0, 0, settings.getScreenWidth(), settings.getScreenHeight(), 0, 0, 0, 255 ); - - universe->renderBackground( screen ); - players->render( screen ); - universe->renderForeground( screen ); - - stringstream s; - s << timer.getTimeMMSSHH(); - - FPScounter++; - if( SDL_GetTicks() - FPStimer >= 1000 ) { - if( FPS == 0 ) - FPS = ( FPS + 1000.0 * FPScounter / ( SDL_GetTicks() - FPStimer ) ) / 2; - else - FPS = 1000.0 * FPScounter / ( SDL_GetTicks() - FPStimer ); - FPStimer = SDL_GetTicks(); - FPScounter = 0; - } - s << " (" << setiosflags(ios::fixed) << setprecision(2) << FPS << "FPS)"; - font->render( screen, 13, settings.getGameHeight() - 30, s.str().c_str(), 0x80, 0x80, 0x80 ); - - SDL_UpdateRect(screen, 0, 0, settings.getScreenWidth(), settings.getScreenHeight() ); - -} - -void changeScreen(SDL_Surface **screen) { - - if( settings.getFullscreen() ) - *screen = SDL_SetVideoMode( settings.getScreenWidth(), settings.getScreenHeight(), 32, SDL_SWSURFACE | SDL_FULLSCREEN ); - else - *screen = SDL_SetVideoMode( settings.getScreenWidth(), settings.getScreenHeight(), 32, SDL_SWSURFACE ); -} - - -int main(int argc, char** argv) { - -/* bool fullscreen = config.getValueBOOL("fullscreen"); - int h = config.getValueINT("height"); - int w = config.getValueINT("width"); - - settings.setResolution( w, h ); - settings.setFullscreen( fullscreen ); -*/ - bool FirstRun = true; - - int numberOfPlanets; - int numberOfComputerPlayers; - - bool NextRound = true; - while (NextRound){ - state = PLAYING; - - if (FirstRun){ - FirstRun=false; - if( argc != 3 ) { - //cerr << "Usage: " << argv[ 0 ] << " numberOfPlanets numberOfComputerPlayers" << endl; - //cerr << "Setting to default 6 planets and 1 computer player" << endl; -// numberOfPlanets = config.getValueINT("numberOfPlanets"); -// numberOfComputerPlayers = config.getValueINT("numberOfComputerPlayers"); - numberOfPlanets = 6; - numberOfComputerPlayers = 1; - } else { - numberOfPlanets = atoi( argv[ 1 ] ); - numberOfComputerPlayers = atoi( argv[ 2 ] ); - } - if( numberOfPlanets <= 1 ) { - cerr << "Resetting to least of 2 planets" << endl; - numberOfPlanets = 2; - } - if( numberOfComputerPlayers > numberOfPlanets - 1 ) { - cerr << "Resetting computer players to maximum of " << numberOfPlanets - 1 << endl; - numberOfComputerPlayers = numberOfPlanets - 1; - } - if( numberOfComputerPlayers <= 1 ) { - cerr << "Resetting computer players to at least 1" << endl; - numberOfComputerPlayers = 1; - } - } - // determine next level when this was passed successfully - - int nextPlanets = numberOfPlanets + 1; - int nextComputerPlayers = numberOfComputerPlayers + 1; - if( nextPlanets == 11 ) { - int d = nextPlanets - nextComputerPlayers; - if( d != 1 ) { - nextPlanets = 10; - } - } - - /* Init SDL */ - if( SDL_Init( SDL_INIT_TIMER | SDL_INIT_VIDEO ) < 0 ) { - cerr << "Couldn't initialize SDL: " << SDL_GetError() << endl; - exit( 1 ); - } - timer.start(); - atexit( SDL_Quit ); - if ( TTF_Init() < 0 ) { - cerr << "Couldn't initialize TTF: " << SDL_GetError() << endl; - exit( 1 ); - } - atexit( TTF_Quit ); - font = new Font( "font.ttf", 18 ); - - srand( time( NULL) ); - - /* Set window title */ - SDL_WM_SetCaption( "Qonk", "Qonk" ); - - /* Initialize the display */ - SDL_Surface *screen; -// cout << settings.getGameWidth() << "+" << settings.getGameOffsetX() << endl; - - changeScreen(&screen); - - Universe* universe = new Universe( numberOfPlanets ); - - Players* players = new Players( universe ); - universe->actionQueue->scheduleAction( 1000, new UpdatePlayersStatsAction( players ) ); - - Planets::iterator planetIterator = universe->planets->begin(); - HumanPlayer* humanPlayer = new HumanPlayer( universe, &(*planetIterator), 3, 0xffffff ); - players->push_back( humanPlayer ); - planetIterator++; - - int hueCounter = rand() % 360; - int counter = 0; - do { - if( counter < numberOfComputerPlayers ) { - players->push_back( new ComputerPlayer( universe, &(*planetIterator), 3, HSVtoRGB( hueCounter, 0.9, 0.9 ) ) ); - counter++; - hueCounter = ( hueCounter + 360 / numberOfComputerPlayers ) % 360; - } else - if( !(&(*planetIterator))->getMoon() ) - players->push_back( new NeutralPlayer( universe, &(*planetIterator), 1 + rand() % 3, 0x606060 ) ); - else - players->push_back( new NeutralPlayer( universe, &(*planetIterator), 1 + rand() % 2, 0x606060 ) ); - planetIterator++; - } while( planetIterator != universe->planets->end() ); - - - Selection selection; - - int iteration = 0; - - bool showEnemyShips = false; - - bool quit = false; - - // Main loop: loop forever. - while( !quit ) { - - render( screen, universe, players ); - - if( !timer.isPaused() ) { - - // update the universe - - universe->update(); - - // let players update their states - - players->update(); - - } - - // Poll for events, and handle the ones we care about. - SDL_Event event; - while (SDL_PollEvent(&event)) { - - switch (event.type) { - - case SDL_KEYDOWN: - break; - case SDL_KEYUP: - if( event.key.keysym.sym == SDLK_p ) { - timer.pause(); - } -// if( event.key.keysym.sym == SDLK_t ) -// showEnemyShips = !showEnemyShips; - // If escape is pressed, return (and thus, quit) - if(event.key.keysym.sym == SDLK_ESCAPE){ - quit = true; - NextRound = false; - } - if(event.key.keysym.sym == SDLK_n) - if (state==WON) - quit = true; - - if(event.key.keysym.sym == SDLK_r){ - quit = true; - nextPlanets=numberOfPlanets; - nextComputerPlayers = numberOfComputerPlayers; - } - if(event.key.keysym.sym == SDLK_f){ - if(settings.getFullscreen()){ - settings.setFullscreen( false ); - } - else if(!settings.getFullscreen()){ - settings.setFullscreen( true ); - } - - changeScreen(&screen); - } - break; - case SDL_QUIT: - quit = true; - NextRound = false; - - } - - } - - if( humanPlayer->getPoints() == 0 ) { - showEnemyShips = true; - state = LOST; - } - - if( state == PLAYING ) { - bool allPlayersDead = true; - for( Players::iterator i = players->begin(); i != players->end(); i++ ) { - if( (*i)->getPlayerType() == Player::COMPUTER ) - if( ((ComputerPlayer*)(*i))->getPoints() > 0 ) - allPlayersDead = false; - } - if( allPlayersDead == true ) { - MSGwon(universe, nextPlanets, nextComputerPlayers); - state = WON; - } - } - - Uint8 *keystate = SDL_GetKeyState(NULL); - bool show = false; - if( keystate[SDLK_e] ) { - show = true; - } - if( keystate[SDLK_a] ) { - humanPlayer->selectAllPlanets(); - } - if( keystate[SDLK_s] ) { - SDL_SaveBMP( SDL_GetVideoSurface(), "screenshot.bmp" ); - } - for ( int i=SDLK_0; i<=SDLK_9; i++ ) { - if (keystate[i]) { - int sel = (i == SDLK_0) - ? 100 - : (i-SDLK_0) * 10; - humanPlayer->setFleetSelection(sel); - } - } - - for( Players::iterator i = players->begin(); i != players->end(); i++ ) { - if( (*i)->getPlayerType() == Player::COMPUTER ) - ((ComputerPlayer*)(*i))->setDisplayShips( show || showEnemyShips ); - if( (*i)->getPlayerType() == Player::NEUTRAL ) - ((NeutralPlayer*)(*i))->setDisplayShips( show || showEnemyShips ); - } - - // Keep shut for some time, not to use too much CPU - - // SDL_Delay( 20 ); - - } - - delete font; - delete universe; - delete players; - - /* // We dont want to much output to cout - if( state == LOST ) { - cout << "The AI players have kicked you out? Bastards!" << endl; - cout << "Try harder, run QONK again, with \n\n\t" << argv[ 0 ] << " " << numberOfPlanets << " " << numberOfComputerPlayers << "\n" << endl; - } else if ( state == PLAYING ) { - cout << "You gave up early?!" << endl; - cout << "Try again, run QONK again, with \n\n\t" << argv[ 0 ] << " " << numberOfPlanets << " " << numberOfComputerPlayers << "\n" << endl; - } else { - cout << "You have QONKuered the solar system! You won!" << endl; - cout << "Move on to the next level, and run QONK again with \n\n\t" << argv[ 0 ] << " " << nextPlanets << " " << nextComputerPlayers << "\n" << endl; - }*/ - - numberOfPlanets = nextPlanets; - numberOfComputerPlayers = nextComputerPlayers; - } - return 0; - -} Deleted: branches/input-abstraction-2007-06-12/messages.cpp =================================================================== --- trunk/messages.cpp 2007-06-12 11:18:17 UTC (rev 25) +++ branches/input-abstraction-2007-06-12/messages.cpp 2007-06-12 12:16:32 UTC (rev 30) @@ -1,134 +0,0 @@ -// Copyright 2005 by Anthony Liekens an...@li... - -#include "messages.h" - - -Message::Message( string message, Uint32 displayTime, Uint8 r, Uint8 g, Uint8 b ) { - this->message = string( "[" ) + timer.getTimeMMSS() + "] " + message; - this->displayTime= displayTime; - this->r = r; - this->g = g; - this->b = b; -} - -Message::Message( string message, Uint32 displayTime, Uint32 color ) { - this->message = string( "[" ) + timer.getTimeMMSS() + "] " + message; - this->displayTime = displayTime; - this->r = getGreen( color ); - this->g = getRed( color ); - this->b = getBlue( color ); -} - -Message::Message( string message, Uint8 r, Uint8 g, Uint8 b ) { - this->message = string( "[" ) + timer.getTimeMMSS() + "] " + message; - this->displayTime= 10000; - this->r = r; - this->g = g; - this->b = b; -} - -Message::Message( string message, Uint32 color ) { - this->message = string( "[" ) + timer.getTimeMMSS() + "] " + message; - this->displayTime = 10000; - this->r = getGreen( color ); - this->g = getRed( color ); - this->b = getBlue( color ); -} - -void -Message::render( SDL_Surface* screen, int &x, int &y, Font* font, int time ) { - if( time > 0 ) { - - // default parameters for showing a message - - int dx = font->getHeight(); - int alpha = 255; - - // fading in a message - if( time < 500 ) { - dx = (int)( ( dx * time ) / 600.0 ); - alpha = (int)( ( alpha * time ) / 600.0 ); - } - - // fading out a message - if( time > displayTime - 500 ) { - int timeleft = displayTime - time; - dx = (int)( ( dx * timeleft ) / 600.0 ); - alpha = (int)( ( alpha * timeleft ) / 600.0 ); - } - - // do we still show ourselves? - if( time > displayTime ) { - - dx = 0; - alpha = 0; - - } else { - - font->render( screen, x, y - dx, message.c_str(), r, g, b, alpha ); - - } - - y -= dx; - } -} - -Uint32 -Message::getDisplayTime() { - return displayTime; -} - -Messages::Messages() { - font = new Font( "font.ttf", 12 ); -} - -Messages::~Messages() { - clear(); -} - -void -Messages::addMessage( Uint32 time, Message m ) { - insert( pair< Uint32, Message>( time, m ) ); -} - -void -Messages::cleanup() { - while( ( size() > 0 ) && ( begin()->first + begin()->second.getDisplayTime() < timer.getTime() ) ) - erase( begin() ); -} - -void -Messages::render( SDL_Surface* screen ) { - cleanup(); - int x = 12; - int y = settings.getGameHeight() - 28; - for( reverse_iterator i = rbegin(); i != rend(); i++ ) { - i->second.render( screen, x, y, font, (int)timer.getTime() - (int)i->first ); - } -} - -void -MSGwon(Universe* universe, int nextPlanets, int nextComputerPlayers){ - universe->messages->addMessage( timer.getTime() + 200, Message( "You have QONKuered the solar system! You won!", 20000, 0xffffff ) ); - stringstream s; - s << "Try again, with " << nextPlanets << " planets and " << nextComputerPlayers << " AI players!"; - universe->messages->addMessage( timer.getTime() + 400, Message( s.str(), 20000, 0x808080 ) ); - universe->messages->addMessage( timer.getTime() + 600, Message( "Press [N] ...", 40000, 0x808080 ) ); -} - -void -MSGlost(Universe* universe) { - universe->messages->addMessage( timer.getTime(), Message( "GAME OVER!!! You lost all your planets and ships, you are dead!", 20000, 0xffffff ) ); - universe->messages->addMessage( timer.getTime() + 200, Message( "Press [R] ...", 40000, 0x808080 ) ); -} - -void -MSGstart(Universe* universe) { - universe->messages->addMessage( timer.getTime() + 000, Message( "Let's QONK! Kick the AI players out!", 15000, 0xffffff ) ); - universe->messages->addMessage( timer.getTime() + 200, Message( "[Left click and drag] for multi select, [Middle click] for single select.", 10000, 0x808080 ) ); - universe->messages->addMessage( timer.getTime() + 400, Message( "[Right click] to send ships.", 10000, 0x808080 ) ); - universe->messages->addMessage( timer.getTime() + 600, Message( "[P]ause,[A]ll planets,[R]estart.", 10000, 0x808080 ) ); - universe->messages->addMessage( timer.getTime() + 700, Message( "[Escape] to quit", 10000, 0x808080 ) ); - universe->messages->addMessage( timer.getTime() + 800, Message( "[1]-[0] fleet selection (10%-100%)", 10000, 0x808080 ) ); - universe->messages->addMessage( timer.getTime() + 1000, Message( "Initial fleet selection is 50%", 10000, 0x808080 ) ); -} Deleted: branches/input-abstraction-2007-06-12/messages.h =================================================================== --- trunk/messages.h 2007-06-12 11:18:17 UTC (rev 25) +++ branches/input-abstraction-2007-06-12/messages.h 2007-06-12 12:16:32 UTC (rev 30) @@ -1,46 +0,0 @@ -// Copyright 2005 by Anthony Liekens an...@li... - -#ifndef MESSAGES_H -#define MESSAGES_H - -#include "fonts.h" -#include "extensions.h" -#include "config.h" -#include "universe.h" -#include <SDL/SDL.h> -#include <map> -#include <string> -using namespace std; - -class Universe; - -class Message { -private: - Uint8 r, g, b; - Uint32 displayTime; - string message; -public: - Message( string message, Uint32 displayTime, Uint8 r, Uint8 g, Uint8 b ); - Message( string message, Uint32 displayTime, Uint32 color ); - Message( string message, Uint8 r, Uint8 g, Uint8 b ); - Message( string message, Uint32 color ); - void render( SDL_Surface* screen, int &x, int &y, Font* f, int time ); - Uint32 getDisplayTime(); -}; - -class Messages : multimap< Uint32, Message > { -private: - Font* font; -public: - Messages(); - ~Messages(); - void addMessage( Uint32 time, Message m ); - void cleanup(); - void render( SDL_Surface* screen ); - Font* getFont() { return font; } -}; - -void MSGwon(Universe*, int, int); -void MSGlost(Universe*); -void MSGstart(Universe*); -#endif Deleted: branches/input-abstraction-2007-06-12/planets.cpp =================================================================== --- trunk/planets.cpp 2007-06-12 11:18:17 UTC (rev 25) +++ branches/input-abstraction-2007-06-12/planets.cpp 2007-06-12 12:16:32 UTC (rev 30) @@ -1,462 +0,0 @@ -// Copyright 2005 by Anthony Liekens an...@li... - -#include "planets.h" - -#include <SDL_gfxPrimitives.h> - -#include <iostream> -#include <math.h> - -// ##### PLANET ##### - -Planet::Planet() { - rotationSpeed = ( ( rand() % 2 ) * 2 - 1 ) * ( rand() % 60000 + 20000 ); - rotationDistance = 0.05 + 0.4 * ( double )rand() / RAND_MAX; - rotationOffset = rand() % 10000000; - size = 4 + rand() % 4; // [4 ... 8) - isAMoon = false; - mother = NULL; - selected = false; - sourceSelected = false; - owner = NULL; - shipCreationSpeed = 12500 - size*1000; -} - -void -Planet::makeMoon( Planet* mother ) { - rotationSpeed = ( ( rand() % 2 ) * 2 - 1 ) * ( rand() % 2000 + 2000 ); - rotationDistance = 0.01 + 0.03 * ( double )rand() / RAND_MAX; - rotationOffset = rand() % 100000; - size = 2 + rand() % 2; // [2 ... 4) - isAMoon = true; - this->mother = mother; - shipCreationSpeed = 15000 - size*1000; -} - -Coordinate -Planet::getVector( Uint32 time ) const { - double angle = (double)( rotationOffset + time ) / rotationSpeed; - return Coordinate( cos( angle ), sin( angle ) ); -} - -Coordinate -Planet::getLocation( Uint32 time ) const { - Coordinate motherLocation; - if( isAMoon ) { - motherLocation = mother->getLocation(); - } else { - motherLocation.setX( 0.5 ); - motherLocation.setY( 0.5 ); - } - Coordinate v = getVector( time ); - double x = motherLocation.getX() + rotationDistance * v.getX(); - double y = motherLocation.getY() + rotationDistance * v.getY(); - return Coordinate( x, y ); -} - -Coordinate -Planet::getLocation() const { - return getLocation( timer.getTime() ); -} - -void -Planet::addResident( Ship* ship, Uint32 time ) { - if( ( owner == NULL ) || ( owner == ship->getOwner() ) || ( residentShips.size() == 0 ) ) { - if( owner != ship->getOwner() ) { - - // clear out "create ship" actions scheduled for this planet - vector< ActionQueue::iterator > removes; - for( ActionQueue::iterator i = universe->actionQueue->begin(); i != universe->actionQueue->end(); i++ ) { - if( (i->second)->getActionID() == 1 ) { - Planet* planetOfIterator = ((CreateShipAction*)(i->second))->getPlanet(); - if( planetOfIterator == this ) - removes.push_back( i ); - } - } - - for( vector< ActionQueue::iterator >::iterator i = removes.begin(); i != removes.end(); i++ ) { - universe->actionQueue->erase( *i ); - } - - // create a new "create ship" action - buildStartTime = time; - buildEndTime = time + shipCreationSpeed; - universe->actionQueue->scheduleAction( buildEndTime, new CreateShipAction( ship->getOwner(), this ) ); - - // show an animation of planet conquests that are of our interest - Uint32 color = 0; - color = ship->getOwner()->getColor(); - if( owner != NULL ) - if( isAMoon ) - universe->animationQueue->scheduleAction( time + 1200, new SonarAnimation( this, color, 50, time, time + 1000, true ) ); - else - universe->animationQueue->scheduleAction( time + 1200, new SonarAnimation( this, color, 100, time, time + 1000, true ) ); - - } - residentShips.push_back( ship ); - setOwner(ship->getOwner()); - - } else { - ship->die(); - Ship* resident = *( residentShips.begin() ); - removeResident( resident ); - resident->die(); - - // show an animation of die'ing ships that are of our interest - if( ( ship->getOwner()->getPlayerType() == Player::HUMAN ) || ( owner->getPlayerType() == Player::HUMAN ) ) { - universe->animationQueue->scheduleAction( time + 1000, new SonarAnimation( this, ship->getOwner()->getColor(), 20, time, time + 1000, true ) ); - } -// if( owner->getPlayerType() == Player::HUMAN ) { -// universe->animationQueue->scheduleAction( time + 1000, new SonarAnimation( this, 0xc00000, 20, time, time + 1000 ) ); -// } - } -} - -void -Planet::setOwner(Player *newOwner) -{ - if (owner != NULL) - owner->removePlanet(this); - - owner = newOwner; - - newOwner->addPlanet(this); -} - -void -Planet::removeResident( Ship* ship ) { - residentShips.remove( ship ); -} - -void -Planet::render( SDL_Surface* screen ) const { - if( owner->getPlayerType() == Player::HUMAN ) - renderBuildProgress( screen ); - Coordinate location = getLocation(); - int x = location.getXMapped(); - int y = location.getYMapped(); - drawPlanet( screen, x, y, size, owner->getColor() ); - if( selected ) - renderSelector( screen ); - - if( sourceSelected ) - renderSourceSelector( screen ); -} - -void -Planet::renderOrbit( SDL_Surface* screen ) const { - Coordinate centerLocation; - if( isAMoon ) { - centerLocation = mother->getLocation(); - } else { - centerLocation.setX( 0.5 ); - centerLocation.setY( 0.5 ); - } - if( owner != NULL ) - aaellipseRGBA( screen, centerLocation.getXMapped(), centerLocation.getYMapped(), (int)( rotationDistance * settings.getGameWidth() ), (int)( rotationDistance * settings.getGameHeight() ), getRed( owner->getColor() ), getGreen( owner->getColor() ), getBlue( owner->getColor() ), 64 ); - if( getMoon() ) { - mother->renderOrbit( screen ); - } -} - -void -Planet::renderSelector( SDL_Surface* screen ) const { - Coordinate location = getLocation(); - int x = location.getXMapped(); - int y = location.getYMapped(); - drawSelector( screen, x - 4, y - 4, 10, 10, 0, 0, 0 ); - drawSelector( screen, x - 5, y - 5, 10, 10, 255, 192, 0 ); -} - -void -Planet::renderSourceSelector( SDL_Surface* screen ) const { - Coordinate location = getLocation(); - int x = location.getXMapped(); - int y = location.getYMapped(); - drawSelector( screen, x - 4, y - 4, 10, 10, 0, 0, 0 ); - drawSelector( screen, x - 5, y - 5, 10, 10, 255, 255, 255 ); -} - -void -Planet::renderBuildProgress( SDL_Surface* screen ) const { - - - Coordinate location = getLocation(); - Font* font = universe->messages->getFont(); - int x = location.getXMapped(); - int y = location.getYMapped(); - double percentage = 100.0 * ( timer.getTime() - buildStartTime ) / ( buildEndTime - buildStartTime ); - aacircleRGBA( screen, x, y, (int)( size + 102.5 - percentage ), 0xff, 0xff, 0xff, (int)( 0.2 * percentage ) ); - -} - -void -Planet::updateShipLocations() { - if( residentShips.size() > 0 ) { - Coordinate location = getLocation(); - int counter = 0; - double offset = 500 * rotationDistance + (double)timer.getTime() / 10000; - for( list< Ship* >::iterator i = residentShips.begin(); i != residentShips.end(); i++ ) { - double shipX = location.getX() + 0.02 * cos( offset + counter * 2 * PI / residentShips.size() ); - double shipY = location.getY() + 0.02 * sin( offset + counter * 2 * PI / residentShips.size() ); - (*i)->setLocation( shipX, shipY ); - counter++; - } - } -} - -double -Planet::distance( Planet* planet ) { - return planet->getLocation().distance( getLocation() ); -} - -void -Planet::setSourceSelected( bool selected ) { - this->sourceSelected = selected; -} - -void -Planet::setSelected( bool selected ) { - this->selected = selected; -} - -void -Planet::setUniverse( Universe* universe ) { - this->universe = universe; -} - -void -Planet::createShip( const Uint32& time, Player* player ) { - if( player->getPlayerType() != Player::NEUTRAL ) - if( owner == player ) { - player->addShips( this, 1 ); - buildStartTime = time; - buildEndTime = time + shipCreationSpeed; - universe->actionQueue->scheduleAction( buildEndTime, new CreateShipAction( player, this ) ); - } -} - -void -Planet::moveResidentsTo(Planet *destination, int fleetSelection) { - // Save same fuel ... :) - if (destination == this || !residentShips.size()) { - return; - } - - int decampeeCount = (fleetSelection * residentShips.size()) / 100; - if (!decampeeCount) - return; - - // Calling Ship->moveTo will affect the residentShips list so we have to - // copy the ships which are going for war into their own list. - list <Ship *> decampees; - for (list <Ship *>::iterator i = residentShips.begin(); decampeeCount > 0; i++) { - decampees.push_back(*i); - decampeeCount--; - } - - for (list <Ship *>::iterator i = decampees.begin(); i != decampees.end(); i++) { - (*i)->moveTo(timer.getTime() + rand() % 500, destination, universe->actionQueue); - } -} - -// ##### PLANETS ##### - -Planets::Planets() { -} - -Planets::Planets( int numberOfPlanets, int numberOfMoons ) { - - addPlanets( numberOfPlanets ); - addMoons( numberOfMoons ); - -} - -void -Planets::addPlanets( int numberOfPlanets ) { - - for( int i = 0; i < numberOfPlanets; i++ ) { - push_back( Planet() ); - } - -} - -void -Planets::addMoons( int numberOfMoons ) { - - if( size() == 0 ) { - cerr << "Error constructing moons, no planets yet" << endl; - exit( 1 ); - } - - for( int i = 0; i < numberOfMoons; i++ ) { - iterator motherPlanet; - bool done = false; - do { - int mother = rand() % size(); - motherPlanet = begin(); - for( int j = 0; j < mother; j++ ) motherPlanet++; - done = !motherPlanet->getMoon(); - } while( !done ); - Planet p; - p.makeMoon( &(*motherPlanet) ); - push_back( p ); - } - -} - -void -Planets::render( SDL_Surface* screen ) const { - for( const_iterator i = begin(); i != end(); i++ ) - i->render( screen ); -} - -void -Planets::renderOrbits( SDL_Surface* screen ) const { - for( const_iterator i = begin(); i != end(); i++ ) - i->renderOrbit( screen ); -} - -Planet* -Planets::closestToCoordinate( const Coordinate& c ) { - double closestDistance = 5000; - Planet* closestPlanet = NULL; - for( iterator i = begin(); i != end(); i++ ) { - double distance = i->getLocation().distance( c ); - if( distance < closestDistance ) { - closestDistance = distance; - closestPlanet = &(*i); - } - } - return closestPlanet; -} - -Planet* -Planets::closestToCoordinate( const Coordinate& c, double treshold ) { - Planet* closest = closestToCoordinate( c ); - if( closest->getLocation().distance( c ) < treshold ) - return closest; - else - return NULL; -} - -void -Planets::select( Selection selection ) { - - double minX = selection.getMinX(); - double maxX = selection.getMaxX(); - double minY = selection.getMinY(); - double maxY = selection.getMaxY(); - - for( iterator i = begin(); i != end(); i++ ) { - Coordinate location = i->getLocation(); - if( ( location.getX() > minX ) && ( location.getX() < maxX ) && ( location.getY() > minY ) && ( location.getY() < maxY ) ) - i->setSelected( true ); - else - i->setSelected( false ); - } - -} - -void -Planets::sourceSelect( Selection *selection, Player *owner ) { - - double minX = selection->getMinX(); - double maxX = selection->getMaxX(); - double minY = selection->getMinY(); - double maxY = selection->getMaxY(); - - for( iterator i = begin(); i != end(); i++ ) { - Coordinate location = i->getLocation(); - if( ( location.getX() > minX ) && ( location.getX() < maxX ) - && ( location.getY() > minY ) && ( location.getY() < maxY ) - && i->getOwner() == owner ) - i->setSourceSelected( true ); - else - i->setSourceSelected( false ); - } - -} - -void -Planets::updateShipLocations() { - for( iterator i = begin(); i != end(); i++ ) - i->updateShipLocations(); -} - -void -Planets::setUniverse( Universe* universe ) { - for( iterator i = begin(); i != end(); i++ ) - i->setUniverse( universe ); -} - -Planet* -Planets::getRandomPlanet() { - int number = rand() % size(); - iterator i = begin(); - for( int k = 0; k < number; k++ ) - i++; - return &(*i); -} - -Planet* -Planets::getRandomEnemyPlanet( Player* player ) { -} - -Planet* -Planets::getRandomNearbyPlanet( Planet* planet ) { - - Planet* result; - do { - result = getRandomPlanet(); - } while( result == planet ); - double distance = planet->distance( result ); - - for( int i = 0; i < size() / 2; i++ ) { - Planet* otherPlanet; - do { - otherPlanet = getRandomPlanet(); - } while( otherPlanet == planet ); - double otherDistance = planet->distance( otherPlanet ); - - // which planets do we prefer? - - if( otherPlanet->getOwner() != planet->getOwner() ) - otherDistance *= 0.1; - if( otherPlanet->getOwner()->getPlayerType() == Player::NEUTRAL ) - otherDistance *= 0.5; - if( ! otherPlanet->getMoon() ) - otherDistance *= 0.8; - - if( otherDistance < distance ) { - result = otherPlanet; - distance = otherDistance; - } - } - - return result; - -} - -// ##### CREATESHIPACTION ##### - -CreateSh... [truncated message content] |
From: <tkj...@us...> - 2007-10-01 15:15:42
|
Revision: 113 http://qonk.svn.sourceforge.net/qonk/?rev=113&view=rev Author: tkjacobsen Date: 2007-10-01 08:15:39 -0700 (Mon, 01 Oct 2007) Log Message: ----------- Made a branch with an animated sun Modified Paths: -------------- branches/animated-sun/src/canvas.cpp branches/animated-sun/src/extensions.h branches/animated-sun/src/fonts.cpp Added Paths: ----------- branches/animated-sun/ Copied: branches/animated-sun (from rev 112, releases/qonk-0.3.0) Modified: branches/animated-sun/src/canvas.cpp =================================================================== --- releases/qonk-0.3.0/src/canvas.cpp 2007-09-16 14:50:39 UTC (rev 112) +++ branches/animated-sun/src/canvas.cpp 2007-10-01 15:15:39 UTC (rev 113) @@ -10,13 +10,15 @@ #include "settings.h" #include "fonts.h" +#include <math.h> + SDL_Surface* Canvas::main = 0; gcn::SDLGraphics *Canvas::sdlGraphics = 0; Font* Canvas::font = 0; -void +void Canvas::alphaBlend( SDL_Surface* surface, Uint8 alpha ) { if( alpha == 0 ) { for( int x = 0; x < surface->w; x++ ) @@ -203,11 +205,22 @@ Sint16 x0 = Settings::getGameOffsetX() + Settings::getGameWidth() / 2; Sint16 y0 = Settings::getGameHeight() / 2; - filledTrigonRGBA( main, x0+5, y0, x0-5,y0, x0, y0+15, 255, 205, 0, 255); - filledTrigonRGBA( main, x0+5, y0, x0-5,y0, x0, y0-15, 255, 205, 0, 255); - filledTrigonRGBA( main, x0+15, y0, x0,y0+5, x0, y0-5, 255, 205, 0, 255); - filledTrigonRGBA( main, x0-15, y0, x0,y0+5, x0, y0-5, 255, 205, 0, 255); + static Counter counter(1000); //number of frames per cycle + int amplitude = 3; + double phase = static_cast<double>(counter.getCountMax())/8; + double p0 = sin( 2*M_PI * ( counter.getCount() - 0*phase )/( counter.getCountMax() ) ); + double p1 = sin( 2*M_PI * ( counter.getCount() - 1*phase )/( counter.getCountMax() ) ); + double p2 = sin( 2*M_PI * ( counter.getCount() - 2*phase )/( counter.getCountMax() ) ); + double p3 = sin( 2*M_PI * ( counter.getCount() - 3*phase )/( counter.getCountMax() ) ); + + counter.increment(); + + filledTrigonRGBA( main, x0+5, y0, x0-5,y0, x0, y0+15 + amplitude*p0, 255, 205, 0, 255); + filledTrigonRGBA( main, x0+5, y0, x0-5,y0, x0, y0-15 + amplitude*p2, 255, 205, 0, 255); + filledTrigonRGBA( main, x0+15 + amplitude*p1, y0, x0,y0+5, x0, y0-5, 255, 205, 0, 255); + filledTrigonRGBA( main, x0-15 + amplitude*p3, y0, x0,y0+5, x0, y0-5, 255, 205, 0, 255); + filledTrigonRGBA( main, x0+10, y0-10, x0+5,y0, x0, y0-5, 255, 205, 0, 255); filledTrigonRGBA( main, x0-10, y0-10, x0-5,y0, x0, y0-5, 255, 205, 0, 255); filledTrigonRGBA( main, x0+10, y0+10, x0+5,y0, x0, y0+5, 255, 205, 0, 255); @@ -225,10 +238,10 @@ void Canvas::drawStar(int x, int y, int brightness) { - pixelRGBA( main, x, y, - brightness + rand() % 64, - brightness + rand() % 64, - brightness + rand() % 64, + pixelRGBA( main, x, y, + brightness + rand() % 64, + brightness + rand() % 64, + brightness + rand() % 64, 255 ); } Modified: branches/animated-sun/src/extensions.h =================================================================== --- releases/qonk-0.3.0/src/extensions.h 2007-09-16 14:50:39 UTC (rev 112) +++ branches/animated-sun/src/extensions.h 2007-10-01 15:15:39 UTC (rev 113) @@ -13,4 +13,18 @@ Uint8 getGreen( Uint32 color ); Uint8 getBlue( Uint32 color ); +class Counter +{ + private: + int count; + int countmax; + + public: + Counter(int max): countmax(max), count(0) {} + + void increment() {count += 1; count = count%countmax;} + int getCount() {return count;} + int getCountMax() {return countmax;} +}; + #endif Modified: branches/animated-sun/src/fonts.cpp =================================================================== --- releases/qonk-0.3.0/src/fonts.cpp 2007-09-16 14:50:39 UTC (rev 112) +++ branches/animated-sun/src/fonts.cpp 2007-10-01 15:15:39 UTC (rev 113) @@ -8,7 +8,7 @@ Font::Font( char* fileName, int size ) { std::string s = PKG_DATA_DIR; - s =+ fileName; + s += fileName; if (font = TTF_OpenFont (s.c_str(), size)) { TTF_SetFontStyle( font, TTF_STYLE_NORMAL ); @@ -27,7 +27,7 @@ TTF_SetFontStyle( font, TTF_STYLE_NORMAL ); return; } - + cerr << "Could not load " << size << "pt font " << fileName << " from the following directories: " << endl << PKG_DATA_DIR << endl << "data" << endl; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fu...@us...> - 2007-10-02 14:10:56
|
Revision: 118 http://qonk.svn.sourceforge.net/qonk/?rev=118&view=rev Author: fursund Date: 2007-10-02 07:10:48 -0700 (Tue, 02 Oct 2007) Log Message: ----------- starting qonk opengl branch Added Paths: ----------- branches/qonk-opengl/ branches/qonk-opengl/COPYING branches/qonk-opengl/COPYING-GUICHAN branches/qonk-opengl/HISTORY branches/qonk-opengl/INSTALL branches/qonk-opengl/Makefile.am branches/qonk-opengl/README branches/qonk-opengl/THANKYOU branches/qonk-opengl/TODO branches/qonk-opengl/autogen.sh branches/qonk-opengl/config.h.in branches/qonk-opengl/configure.ac branches/qonk-opengl/data/ branches/qonk-opengl/data/Makefile.am branches/qonk-opengl/data/README branches/qonk-opengl/data/font.ttf branches/qonk-opengl/data/highlight.png branches/qonk-opengl/data/normal.png branches/qonk-opengl/guichan/ branches/qonk-opengl/guichan/Makefile.am branches/qonk-opengl/guichan/guichan/ branches/qonk-opengl/guichan/guichan/Makefile.am branches/qonk-opengl/guichan/guichan/README branches/qonk-opengl/guichan/guichan/actionevent.cpp branches/qonk-opengl/guichan/guichan/actionevent.hpp branches/qonk-opengl/guichan/guichan/actionlistener.hpp branches/qonk-opengl/guichan/guichan/basiccontainer.cpp branches/qonk-opengl/guichan/guichan/basiccontainer.hpp branches/qonk-opengl/guichan/guichan/cliprectangle.cpp branches/qonk-opengl/guichan/guichan/cliprectangle.hpp branches/qonk-opengl/guichan/guichan/color.cpp branches/qonk-opengl/guichan/guichan/color.hpp branches/qonk-opengl/guichan/guichan/deathlistener.hpp branches/qonk-opengl/guichan/guichan/defaultfont.cpp branches/qonk-opengl/guichan/guichan/defaultfont.hpp branches/qonk-opengl/guichan/guichan/event.cpp branches/qonk-opengl/guichan/guichan/event.hpp branches/qonk-opengl/guichan/guichan/exception.cpp branches/qonk-opengl/guichan/guichan/exception.hpp branches/qonk-opengl/guichan/guichan/focushandler.cpp branches/qonk-opengl/guichan/guichan/focushandler.hpp branches/qonk-opengl/guichan/guichan/font.cpp branches/qonk-opengl/guichan/guichan/font.hpp branches/qonk-opengl/guichan/guichan/graphics.cpp branches/qonk-opengl/guichan/guichan/graphics.hpp branches/qonk-opengl/guichan/guichan/gui.cpp branches/qonk-opengl/guichan/guichan/gui.hpp branches/qonk-opengl/guichan/guichan/guichan.cpp branches/qonk-opengl/guichan/guichan/image.cpp branches/qonk-opengl/guichan/guichan/image.hpp branches/qonk-opengl/guichan/guichan/imagefont.cpp branches/qonk-opengl/guichan/guichan/imagefont.hpp branches/qonk-opengl/guichan/guichan/imageloader.hpp branches/qonk-opengl/guichan/guichan/input.hpp branches/qonk-opengl/guichan/guichan/inputevent.cpp branches/qonk-opengl/guichan/guichan/inputevent.hpp branches/qonk-opengl/guichan/guichan/key.cpp branches/qonk-opengl/guichan/guichan/key.hpp branches/qonk-opengl/guichan/guichan/keyevent.cpp branches/qonk-opengl/guichan/guichan/keyevent.hpp branches/qonk-opengl/guichan/guichan/keyinput.cpp branches/qonk-opengl/guichan/guichan/keyinput.hpp branches/qonk-opengl/guichan/guichan/keylistener.hpp branches/qonk-opengl/guichan/guichan/listmodel.hpp branches/qonk-opengl/guichan/guichan/mouseevent.cpp branches/qonk-opengl/guichan/guichan/mouseevent.hpp branches/qonk-opengl/guichan/guichan/mouseinput.cpp branches/qonk-opengl/guichan/guichan/mouseinput.hpp branches/qonk-opengl/guichan/guichan/mouselistener.hpp branches/qonk-opengl/guichan/guichan/opengl.hpp branches/qonk-opengl/guichan/guichan/platform.hpp branches/qonk-opengl/guichan/guichan/rectangle.cpp branches/qonk-opengl/guichan/guichan/rectangle.hpp branches/qonk-opengl/guichan/guichan/sdl/ branches/qonk-opengl/guichan/guichan/sdl/Makefile.am branches/qonk-opengl/guichan/guichan/sdl/sdl.cpp branches/qonk-opengl/guichan/guichan/sdl/sdlgraphics.cpp branches/qonk-opengl/guichan/guichan/sdl/sdlgraphics.hpp branches/qonk-opengl/guichan/guichan/sdl/sdlimage.cpp branches/qonk-opengl/guichan/guichan/sdl/sdlimage.hpp branches/qonk-opengl/guichan/guichan/sdl/sdlimageloader.cpp branches/qonk-opengl/guichan/guichan/sdl/sdlimageloader.hpp branches/qonk-opengl/guichan/guichan/sdl/sdlinput.cpp branches/qonk-opengl/guichan/guichan/sdl/sdlinput.hpp branches/qonk-opengl/guichan/guichan/sdl/sdlpixel.hpp branches/qonk-opengl/guichan/guichan/sdl.hpp branches/qonk-opengl/guichan/guichan/widget.cpp branches/qonk-opengl/guichan/guichan/widget.hpp branches/qonk-opengl/guichan/guichan/widgets/ branches/qonk-opengl/guichan/guichan/widgets/Makefile.am branches/qonk-opengl/guichan/guichan/widgets/button.cpp branches/qonk-opengl/guichan/guichan/widgets/button.hpp branches/qonk-opengl/guichan/guichan/widgets/checkbox.cpp branches/qonk-opengl/guichan/guichan/widgets/checkbox.hpp branches/qonk-opengl/guichan/guichan/widgets/container.cpp branches/qonk-opengl/guichan/guichan/widgets/container.hpp branches/qonk-opengl/guichan/guichan/widgets/dropdown.cpp branches/qonk-opengl/guichan/guichan/widgets/dropdown.hpp branches/qonk-opengl/guichan/guichan/widgets/icon.cpp branches/qonk-opengl/guichan/guichan/widgets/icon.hpp branches/qonk-opengl/guichan/guichan/widgets/label.cpp branches/qonk-opengl/guichan/guichan/widgets/label.hpp branches/qonk-opengl/guichan/guichan/widgets/listbox.cpp branches/qonk-opengl/guichan/guichan/widgets/listbox.hpp branches/qonk-opengl/guichan/guichan/widgets/radiobutton.cpp branches/qonk-opengl/guichan/guichan/widgets/radiobutton.hpp branches/qonk-opengl/guichan/guichan/widgets/scrollarea.cpp branches/qonk-opengl/guichan/guichan/widgets/scrollarea.hpp branches/qonk-opengl/guichan/guichan/widgets/slider.cpp branches/qonk-opengl/guichan/guichan/widgets/slider.hpp branches/qonk-opengl/guichan/guichan/widgets/textbox.cpp branches/qonk-opengl/guichan/guichan/widgets/textbox.hpp branches/qonk-opengl/guichan/guichan/widgets/textfield.cpp branches/qonk-opengl/guichan/guichan/widgets/textfield.hpp branches/qonk-opengl/guichan/guichan/widgets/window.cpp branches/qonk-opengl/guichan/guichan/widgets/window.hpp branches/qonk-opengl/guichan/guichan.hpp branches/qonk-opengl/src/ branches/qonk-opengl/src/Makefile.am branches/qonk-opengl/src/actions.cpp branches/qonk-opengl/src/actions.h branches/qonk-opengl/src/animations.cpp branches/qonk-opengl/src/animations.h branches/qonk-opengl/src/canvas.cpp branches/qonk-opengl/src/canvas.h branches/qonk-opengl/src/controloptions.cpp branches/qonk-opengl/src/controloptions.h branches/qonk-opengl/src/coordinate.cpp branches/qonk-opengl/src/coordinate.h branches/qonk-opengl/src/extensions.cpp branches/qonk-opengl/src/extensions.h branches/qonk-opengl/src/fonts.cpp branches/qonk-opengl/src/fonts.h branches/qonk-opengl/src/game.cpp branches/qonk-opengl/src/game.h branches/qonk-opengl/src/gameoptions.cpp branches/qonk-opengl/src/gameoptions.h branches/qonk-opengl/src/input.h branches/qonk-opengl/src/lisp/ branches/qonk-opengl/src/lisp/Makefile.am branches/qonk-opengl/src/lisp/README branches/qonk-opengl/src/lisp/lexer.cpp branches/qonk-opengl/src/lisp/lexer.hpp branches/qonk-opengl/src/lisp/lisp.cpp branches/qonk-opengl/src/lisp/lisp.hpp branches/qonk-opengl/src/lisp/parser.cpp branches/qonk-opengl/src/lisp/parser.hpp branches/qonk-opengl/src/lisp/translation.hpp branches/qonk-opengl/src/lisp/writer.cpp branches/qonk-opengl/src/lisp/writer.hpp branches/qonk-opengl/src/main.cpp branches/qonk-opengl/src/main.h branches/qonk-opengl/src/menu.cpp branches/qonk-opengl/src/menu.h branches/qonk-opengl/src/menuaction.cpp branches/qonk-opengl/src/menuaction.h branches/qonk-opengl/src/menuentry.cpp branches/qonk-opengl/src/menuentry.h branches/qonk-opengl/src/menumanager.cpp branches/qonk-opengl/src/menumanager.h branches/qonk-opengl/src/menusystem.cpp branches/qonk-opengl/src/menusystem.h branches/qonk-opengl/src/messages.cpp branches/qonk-opengl/src/messages.h branches/qonk-opengl/src/planets.cpp branches/qonk-opengl/src/planets.h branches/qonk-opengl/src/players.cpp branches/qonk-opengl/src/players.h branches/qonk-opengl/src/sdl_driver.cpp branches/qonk-opengl/src/sdl_driver.h branches/qonk-opengl/src/selection.cpp branches/qonk-opengl/src/selection.h branches/qonk-opengl/src/settings.cpp branches/qonk-opengl/src/settings.h branches/qonk-opengl/src/ships.cpp branches/qonk-opengl/src/ships.h branches/qonk-opengl/src/stars.cpp branches/qonk-opengl/src/stars.h branches/qonk-opengl/src/timer.cpp branches/qonk-opengl/src/timer.h branches/qonk-opengl/src/universe.cpp branches/qonk-opengl/src/universe.h branches/qonk-opengl/src/videooptions.cpp branches/qonk-opengl/src/videooptions.h Added: branches/qonk-opengl/COPYING =================================================================== --- branches/qonk-opengl/COPYING (rev 0) +++ branches/qonk-opengl/COPYING 2007-10-02 14:10:48 UTC (rev 118) @@ -0,0 +1,340 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + <one line to give the program's name and a brief idea of what it does.> + Copyright (C) <year> <name of author> + + 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, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + <signature of Ty Coon>, 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. Added: branches/qonk-opengl/COPYING-GUICHAN =================================================================== --- branches/qonk-opengl/COPYING-GUICHAN (rev 0) +++ branches/qonk-opengl/COPYING-GUICHAN 2007-10-02 14:10:48 UTC (rev 118) @@ -0,0 +1,38 @@ +This license applies to the embedded guichan distribution: + +Copyright (c) 2004, 2005, 2006 Olof Naessén and Per Larsson +Per Larsson a.k.a finalman +Olof Naessén a.k.a jansem/yakslem +All rights reserved. + +Redistribution and use in source and binary forms, +with or without modification, are permitted provided +that the following conditions are met: + +* Redistributions of source code must retain the above + copyright notice, this list of conditions and the + following disclaimer. +* Redistributions in binary form must reproduce the + above copyright notice, this list of conditions and + the following disclaimer in the documentation and/or + other materials provided with the distribution. +* Neither the name of Guichan nor the names of its + contributors may be used to endorse or promote + products derived from this software without specific + prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, +INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR +BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR +TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY +WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF +THE POSSIBILITY OF SUCH DAMAGE. + Added: branches/qonk-opengl/HISTORY =================================================================== --- branches/qonk-opengl/HISTORY (rev 0) +++ branches/qonk-opengl/HISTORY 2007-10-02 14:10:48 UTC (rev 118) @@ -0,0 +1,33 @@ +0.3.0 - released on 2007/09/09 +Features: + - new project page: http//qonk.sf.net + - public SVN repository: https://qonk.svn.sf.net/svnroot/qonk + - freely choosable input (mouse, keyboard, gamepad, ...) + - config file + - advance to next level without leaving game + - upgraded ship and universe painting + - basic menu system with many working parts + - autotools build system + - single ship mode +Bugs fixed: + - do not call SDL functions in Timer before SDL_Init because of static + initialization + - properly update screen size changes + - allow removing input mappings +other: + - simplified initial planet claiming + - remove need for static Timer variable + - switch to traditional MAJOR.MINOR.MICRO version number scheme + +rs-2007-02-17 - 2007-02-17 A modificated version +Modificated qonk based on 0.0.2beta1 by Robert Schuster: + - ships selection by percentage + - the bigger the planet the shorter the built cycle + +0.0.2beta1 - 2003 - Second public release +Another slightly updated version by Anthony. +http://anthony.liekens.net/pub/files/qonk-0.0.2beta1.tar.gz + +0.0.1 - 2003 - First public release +Initial version by Anthony Liekens +http://anthony.liekens.net/pub/files/qonk-0.0.1.tar.gz Added: branches/qonk-opengl/INSTALL =================================================================== --- branches/qonk-opengl/INSTALL (rev 0) +++ branches/qonk-opengl/INSTALL 2007-10-02 14:10:48 UTC (rev 118) @@ -0,0 +1,47 @@ +General compilation notes +------------------------- + +Qonk uses GNU Autoconf to manage the compilation. Call + + ./configure --help + +to see available options. + +Like all good applications Qonk is able to be run without installation. It tries +to find its data files in ./data first and uses $(pkgdatadir)/data in a second +attempt. + +Dependencies +------------ + +Qonk tries to only use components available in free software operating systems. + +Install the development version of the following packages in order to compile +from source: + + SDL (>= 1.2) + SDL_ttf (>= 2.0) + SDL_gfx (>= 1.2) + SDL_image (>= 1.2) + +Qonk includes a modified version of guichan 0.6.1 in its sources and statically +links that into the executable. The build system was not tested to use a +system-wide installation of guichan 0.6.1. Furthermore since guichan is not +extensively used in Qonk it is planned to remove it in further releases. + +Compilation +----------- + +In a published tarball you only need to execute + + ./configure + make + make install + +(To avoid system-wide installation use the --prefix argument for ./configure !) + +You get helpful error messages if something is not correct with the +dependencies. + +If you want to built the sources from SVN you need to issue ./autogen.sh and +have the autotools installed (GNU Automake, GNU Autoconf, GNU libtool). Added: branches/qonk-opengl/Makefile.am =================================================================== --- branches/qonk-opengl/Makefile.am (rev 0) +++ branches/qonk-opengl/Makefile.am 2007-10-02 14:10:48 UTC (rev 118) @@ -0,0 +1,4 @@ +SUBDIRS = guichan src data + +EXTRA_DIST = autogen.sh README COPYING missing TODO HISTORY THANKYOU + Added: branches/qonk-opengl/README =================================================================== --- branches/qonk-opengl/README (rev 0) +++ branches/qonk-opengl/README 2007-10-02 14:10:48 UTC (rev 118) @@ -0,0 +1,124 @@ +Qonk 0.0.3 +========== + +Qonk is a small build-and-conquer strategy game with very simple rules. A +complete game only lasts for a few minutes and can be a fun break away from +work or whatever you're doing. + +The setting of the game is a solar system of planets. Your goal is to conquer +all of the planets in the game by sending ships there. Planets that are +under your control generate new ships. Simple AI players are playing against +you. As you gain more experience throughout the game, more AI players have to +be kicked out of bigger solar systems. + +(from http://anthony.liekens.net/index.php/Computers/Qonk) + +The game is currently very much in beta. + +For information on how to compile the source code refer to the INSTALL file. + +How to play +----------- + +The goal is wipe out all enemies from the solar system. + +Select a group of planets to put their ships into your selection for the next +move. Now do a right-click near the planet where you want to send you fleet to. +You can attack neutral (grey), enemy (some color) and reinforce your own planets +(the white ones). + +The number of ships starting from a planet depends on the number of ships being +stationed there and the current fleet strength setting. In the beginning the +strength is set to 50%. That means that half of the ships on each selected +planet will take off when you order them to move. You can choose other +strength settings by pressing the number keys (1 -> 10%, 9 -> 90%, 0->100%). +If you press the 's' key you are in single ship mode. This means that on each +move order one ship leaves from the selected planets (there has to be at least +one stationed, though). + +Besides setting the strength to certain values you can lower or higher the +strength by using the mouse wheel. Below 10% comes the single ship mode, +when requesting to lower the strength it switches to 100%. The same happens in +the reverse order when you increase the strength and are at 100%. + +New ships are continuisly built on the planets (and moons) you own. Bigger +planets usually built ships faster than smaller ones. + +Ships stationing at a planet or moon are automatically defending it. The rule +is simple: One defending ship destroys one attacking ships and vice versa. A +planet or moon defended by N ships can only be conquered by at least N + 1 +ships. + +Other options +------------- + +You can toggle displaying of enemy ships by pressing the 'e' key. + +If you see yourself losing and want to retry, press 'r'. If you have won instead +press 'n' to start the next round. + +Press 'f' to switch between fullscreen and windowed mode. In windowed mode you +need to make sure that the mouse cannot leave the game's window. Press 'g' to +activate input grabbing and press it again if you want to release the input. + +To pause the game just press ESC to open the menus. Pressing ESC again puts you +back into the action. + +Command line options +-------------------- + +Start the game with qonk <numberOfPlanets> <numberOfComputerPlayers> to run a +game with such a universe. + +Config file +----------- + +On GNU/Linux and other POSIX-like systems a config file is written in your +home directory at .qonk/qonk.config. + +The format is LISP-like (you remember it from SuperTuxKart probably :) ). + +Development +----------- + +Plans are there to add a single-computer multiplayer mode. Feel free to +contact the development team via the mailing-list. + +Issues +------ +- You cannot select ships which are already in the vasts of space. + +Homepage +-------- + +http://qonk.sourceforge.net + +Project page +------------- + +http://sourceforge.net/projects/qonk + +License +------- + +This game is free software released under the GNU General Public License 2 +or, at your option, any later version. See the file COPYING for details. + +Acknowledgements +---------------- +Qonk uses a number of free software components (libraries) for which we thank +their authors: + +Simple Direct Media Library: http://libsdl.org + * This library is truly a gem! + +Guichan: http://guichan.sf.net + * Provides us some user interface components and made the menu system + implementation easier. + +GNU Autotools: http://gnu.org/software/autoconf + http://gnu.org/software/automake + * These make lifes for packagers and people who cross-compile so much easier. + Unfortunately many people do not understand all the issues around compiling, + linking and installing on different platforms and coping with compatibility + and blame the Autotools for being the root of all evil. Added: branches/qonk-opengl/THANKYOU =================================================================== --- branches/qonk-opengl/THANKYOU (rev 0) +++ branches/qonk-opengl/THANKYOU 2007-10-02 14:10:48 UTC (rev 118) @@ -0,0 +1,6 @@ +The following people have contributed to Qonk: + +Anthony Liekens +Jens Fursund +Robert Schuster +Troels Kofoed Jacobsen Added: branches/qonk-opengl/TODO =================================================================== --- branches/qonk-opengl/TODO (rev 0) +++ branches/qonk-opengl/TODO 2007-10-02 14:10:48 UTC (rev 118) @@ -0,0 +1,17 @@ +AI to hunt for the large planets first + +Difficulty level: +EASY: HumanPlayer build ships faster +NORMAL: As is +HARD: Can't see enemys ships + +Animated sun + Fluctuationg length + drawSun(); function + +Add network multiplayer + +Add single-machine multiplayer + +Replace guichan. It is not used that much. + Added: branches/qonk-opengl/autogen.sh =================================================================== --- branches/qonk-opengl/autogen.sh (rev 0) +++ branches/qonk-opengl/autogen.sh 2007-10-02 14:10:48 UTC (rev 118) @@ -0,0 +1,3 @@ +#!/bin/sh + +aclocal && automake --foreign --add-missing --copy && autoheader && autoconf Property changes on: branches/qonk-opengl/autogen.sh ___________________________________________________________________ Name: svn:executable + * Added: branches/qonk-opengl/config.h.in =================================================================== --- branches/qonk-opengl/config.h.in (rev 0) +++ branches/qonk-opengl/config.h.in 2007-10-02 14:10:48 UTC (rev 118) @@ -0,0 +1,112 @@ +/* config.h.in. Generated from configure.ac by autoheader. */ + +/* Define to 1 if you have the `atexit' function. */ +#undef HAVE_ATEXIT + +/* Define to 1 if you have the <inttypes.h> header file. */ +#undef HAVE_INTTYPES_H + +/* Define to 1 if you have the `SDL' library (-lSDL). */ +#undef HAVE_LIBSDL + +/* Define to 1 if you have the `SDL_gfx' library (-lSDL_gfx). */ +#undef HAVE_LIBSDL_GFX + +/* Define to 1 if you have the `SDL_image' library (-lSDL_image). */ +#undef HAVE_LIBSDL_IMAGE + +/* Define to 1 if you have the `SDL_ttf' library (-lSDL_ttf). */ +#undef HAVE_LIBSDL_TTF + +/* Define to 1 if you have the <memory.h> header file. */ +#undef HAVE_MEMORY_H + +/* Define to 1 if you have the `mkdir' function. */ +#undef HAVE_MKDIR + +/* Define to 1 if you have the <SDL/SDL_gfxPrimitives.h> header file. */ +#undef HAVE_SDL_SDL_GFXPRIMITIVES_H + +/* Define to 1 if you have the <SDL/SDL.h> header file. */ +#undef HAVE_SDL_SDL_H + +/* Define to 1 if you have the <SDL/SDL_image.h> header file. */ +#undef HAVE_SDL_SDL_IMAGE_H + +/* Define to 1 if you have the <SDL/SDL_ttf.h> header file. */ +#undef HAVE_SDL_SDL_TTF_H + +/* Define to 1 if you have the `select' function. */ +#undef HAVE_SELECT + +/* Define to 1 if you have the `sqrt' function. */ +#undef HAVE_SQRT + +/* Define to 1 if stdbool.h conforms to C99. */ +#undef HAVE_STDBOOL_H + +/* Define to 1 if you have the <stdint.h> header file. */ +#undef HAVE_STDINT_H + +/* Define to 1 if you have the <stdlib.h> header file. */ +#undef HAVE_STDLIB_H + +/* Define to 1 if you have the <strings.h> header file. */ +#undef HAVE_STRINGS_H + +/* Define to 1 if you have the <string.h> header file. */ +#undef HAVE_STRING_H + +/* Define to 1 if you have the <sys/select.h> header file. */ +#undef HAVE_SYS_SELECT_H + +/* Define to 1 if you have the <sys/socket.h> header file. */ +#undef HAVE_SYS_SOCKET_H + +/* Define to 1 if you have the <sys/stat.h> header file. */ +#undef HAVE_SYS_STAT_H + +/* Define to 1 if you have the <sys/types.h> header file. */ +#undef HAVE_SYS_TYPES_H + +/* Define to 1 if you have the <unistd.h> header file. */ +#undef HAVE_UNISTD_H + +/* Define to 1 if the system has the type `_Bool'. */ +#undef HAVE__BOOL + +/* Name of package */ +#undef PACKAGE + +/* Define to the address where bug reports for this package should be sent. */ +#undef PACKAGE_BUGREPORT + +/* Define to the full name of this package. */ +#undef PACKAGE_NAME + +/* Define to the full name and version of this package. */ +#undef PACKAGE_STRING + +/* Define to the one symbol short name of this package. */ +#undef PACKAGE_TARNAME + +/* Define to the version of this package. */ +#undef PACKAGE_VERSION + +/* Define to the type of arg 1 for `select'. */ +#undef SELECT_TYPE_ARG1 + +/* Define to the type of args 2, 3 and 4 for `select'. */ +#undef SELECT_TYPE_ARG234 + +/* Define to the type of arg 5 for `select'. */ +#undef SELECT_TYPE_ARG5 + +/* Define to 1 if you have the ANSI C header files. */ +#undef STDC_HEADERS + +/* Version number of package */ +#undef VERSION + +/* Define to empty if `const' does not conform to ANSI C. */ +#undef const Added: branches/qonk-opengl/configure.ac =================================================================== --- branches/qonk-opengl/configure.ac (rev 0) +++ branches/qonk-opengl/configure.ac 2007-10-02 14:10:48 UTC (rev 118) @@ -0,0 +1,49 @@ +# -*- Autoconf -*- +# Process this file with autoconf to produce a configure script. + +AC_PREREQ(2.61) +AC_INIT([qonk], [0.3.0], [qon...@li...]) +AC_CANONICAL_TARGET +AM_INIT_AUTOMAKE + +AC_CONFIG_SRCDIR([src/animations.h]) +AC_CONFIG_HEADER([config.h]) + +# Checks for programs. +AC_PROG_CXX +AC_PROG_CC +AC_PROG_RANLIB + +AC_LANG_C + +AM_PATH_SDL([1.2.0], [:], + AC_MSG_ERROR([No proper SDL found. Please install at least version 1.2.0!])) + + +# Checks for libraries. +AC_CHECK_LIB([SDL], [SDL_Init]) +AC_CHECK_LIB([SDL_ttf], [TTF_Init], ,AC_MSG_ERROR([SDL_ttf missing. Please install at least version 2.0!])) +AC_CHECK_LIB([SDL_gfx], [pixelColor], ,AC_MSG_ERROR([SDL_gfx missing. Please install at least version 1.2!])) +AC_CHECK_LIB([SDL_image], [IMG_Load], ,AC_MSG_ERROR([SDL_image missing. Please install at least version 1.2!])) + +# Checks for header files. +AC_HEADER_STDC +AC_CHECK_HEADERS([stdlib.h SDL/SDL.h SDL/SDL_gfxPrimitives.h SDL/SDL_ttf.h SDL/SDL_image.h]) + +# Checks for typedefs, structures, and compiler characteristics. +AC_HEADER_STDBOOL +AC_C_CONST + +# Checks for library functions. +AC_FUNC_SELECT_ARGTYPES +AC_CHECK_FUNCS([atexit mkdir select sqrt]) + +AC_CONFIG_FILES([Makefile + data/Makefile + src/lisp/Makefile + src/Makefile + guichan/Makefile + guichan/guichan/Makefile + guichan/guichan/sdl/Makefile + guichan/guichan/widgets/Makefile]) +AC_OUTPUT Added: branches/qonk-opengl/data/Makefile.am =================================================================== --- branches/qonk-opengl/data/Makefile.am (rev 0) +++ branches/qonk-opengl/data/Makefile.am 2007-10-02 14:10:48 UTC (rev 118) @@ -0,0 +1,3 @@ +pkgdata_DATA = font.ttf normal.png highlight.png + +EXTRA_DIST = $(pkgdata_DATA) Added: branches/qonk-opengl/data/README =================================================================== --- branches/qonk-opengl/data/README (rev 0) +++ branches/qonk-opengl/data/README 2007-10-02 14:10:48 UTC (rev 118) @@ -0,0 +1,40 @@ +Copyright: +highlight.png and normal.png are taken from the guichan demo 'fps' and are +licensed under the following license: + +Copyright (c) 2004, 2005, 2006 Olof Naessén and Per Larsson +Per Larsson a.k.a finalman +Olof Naessén a.k.a jansem/yakslem +All rights reserved. + +Redistribution and use in source and binary forms, +with or without modification, are permitted provided +that the following conditions are met: + +* Redistributions of source code must retain the above + copyright notice, this list of conditions and the + following disclaimer. +* Redistributions in binary form must reproduce the + above copyright notice, this list of conditions and + the following disclaimer in the documentation and/or + other materials provided with the distribution. +* Neither the name of Guichan nor the names of its + contributors may be used to endorse or promote + products derived from this software without specific + prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, +INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR +BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR +TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY +WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF +THE POSSIBILITY OF SUCH DAMAGE. + Added: branches/qonk-opengl/data/font.ttf =================================================================== (Binary files differ) Property changes on: branches/qonk-opengl/data/font.ttf ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: branches/qonk-opengl/data/highlight.png =================================================================== (Binary files differ) Property changes on: branches/qonk-opengl/data/highlight.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: branches/qonk-opengl/data/normal.png =================================================================== (Binary files differ) Property changes on: branches/qonk-opengl/data/normal.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: branches/qonk-opengl/guichan/Makefile.am =================================================================== --- branches/qonk-opengl/guichan/Makefile.am (rev 0) +++ branches/qonk-opengl/guichan/Makefile.am 2007-10-02 14:10:48 UTC (rev 118) @@ -0,0 +1,6 @@ +SUBDIRS = guichan + +libguichanincludedir = guichan + +libguichaninclude_HEADERS = \ + guichan.hpp \ No newline at end of file Added: branches/qonk-opengl/guichan/guichan/Makefile.am =================================================================== --- branches/qonk-opengl/guichan/guichan/Makefile.am (rev 0) +++ branches/qonk-opengl/guichan/guichan/Makefile.am 2007-10-02 14:10:48 UTC (rev 118) @@ -0,0 +1,66 @@ +SUBDIRS = widgets sdl + +INCLUDES = -I$(top_srcdir)/guichan + +noinst_LIBRARIES = libguichan.a + +libguichan_a_LIBADD = widgets/libguichan_widgets.a sdl/libguichan_sdl.a + +#libguichan_a_DEPENDENCIES = \ +# widgets/libguichan_widgets.a \ +# sdl/libguichan_sdl.a + +# The Guichan library sources +libguichan_a_SOURCES = \ + actionevent.cpp \ + basiccontainer.cpp \ + cliprectangle.cpp \ + color.cpp \ + defaultfont.cpp \ + event.cpp \ + exception.cpp \ + focushandler.cpp \ + font.cpp \ + graphics.cpp \ + gui.cpp \ + guichan.cpp \ + image.cpp \ + imagefont.cpp \ + inputevent.cpp \ + key.cpp \ + keyevent.cpp \ + keyinput.cpp \ + mouseevent.cpp \ + mouseinput.cpp \ + rectangle.cpp \ + widget.cpp \ + actionevent.hpp \ + actionlistener.hpp \ + basiccontainer.hpp \ + cliprectangle.hpp \ + color.hpp \ + deathlistener.hpp \ + defaultfont.hpp \ + event.hpp \ + exception.hpp \ + focushandler.hpp \ + font.hpp \ + graphics.hpp \ + gui.hpp \ + imagefont.hpp \ + image.hpp \ + imageloader.hpp \ + inputevent.hpp \ + input.hpp \ + keyevent.hpp \ + key.hpp \ + keyinput.hpp \ + keylistener.hpp \ + listmodel.hpp \ + mouseevent.hpp \ + mouseinput.hpp \ + mouselistener.hpp \ + platform.hpp \ + rectangle.hpp \ + sdl.hpp \ + widget.hpp Added: branches/qonk-opengl/guichan/guichan/README =================================================================== --- branches/qonk-opengl/guichan/guichan/README (rev 0) +++ branches/qonk-opengl/guichan/guichan/README 2007-10-02 14:10:48 UTC (rev 118) @@ -0,0 +1,4 @@ +This folder contains guichan 0.6.1 which has been customized +to use SDL. + +The source of this library is provided under the revised BSD license. Added: branches/qonk-opengl/guichan/guichan/actionevent.cpp =================================================================== --- branches/qonk-opengl/guichan/guichan/actionevent.cpp (rev 0) +++ branches/qonk-opengl/guichan/guichan/actionevent.cpp 2007-10-02 14:10:48 UTC (rev 118) @@ -0,0 +1,82 @@ +/* _______ __ __ __ ______ __ __ _______ __ __ + * / _____/\ / /\ / /\ / /\ / ____/\ / /\ / /\ / ___ /\ / |\/ /\ + * / /\____\// / // / // / // /\___\// /_// / // /\_/ / // , |/ / / + * / / /__ / / // / // / // / / / ___ / // ___ / // /| ' / / + * / /_// /\ / /_// / // / // /_/_ / / // / // /\_/ / // / | / / + * /______/ //______/ //_/ //_____/\ /_/ //_/ //_/ //_/ //_/ /|_/ / + * \______\/ \______\/ \_\/ \_____\/ \_\/ \_\/ \_\/ \_\/ \_\/ \_\/ + * + * Copyright (c) 2004, 2005, 2006, 2007 Olof Naess\xE9n and Per Larsson + * + * Js_./ + * Per Larsson a.k.a finalman _RqZ{a<^_aa + * Olof Naess\xE9n a.k.a jansem/yakslem _asww7!uY`> )\a// + * _Qhm`] _f "'c 1!5m + * Visit: http://guichan.darkbits.org )Qk<P ` _: :+' .' "{[ + * .)j(] .d_/ '-( P . S + * License: (BSD) <Td/Z <fP"5(\"??"\a. .L + * Redistribution and use in source and _dV>ws?a-?' ._/L #' + * binary forms, with or without )4d[#7r, . ' )d`)[ + * modification, are permitted provided _Q-5'5W..j/?' -?!\)cam' + * that the following conditions are met: j<<WP+k/);. _W=j f + * 1. Redistributions of source code must .$%w\/]Q . ."' . mj$ + * retain the above copyright notice, ]E.pYY(Q]>. a J@\ + * this list of conditions and the j(]1u<sE"L,. . ./^ ]{a + * following disclaimer. 4'_uomm\. )L);-4 (3= + * 2. Redistributions in binary form must )_]X{Z('a_"a7'<a"a, ]"[ + * reproduce the above copyright notice, #}<]m7`Za??4,P-"'7. ).m + * this list of conditions and the ]d2e)Q(<Q( ?94 b- LQ/ + * following disclaimer in the <B!</]C)d_, '(<' .f. =C+m + * documentation and/or other materials .Z!=J ]e []('-4f _ ) -.)m]' + * provided with the distribution. .w[5]' _[ /.)_-"+? _/ <W" + * 3. Neither the name of Guichan nor the :$we` _! + _/ . j? + * names of its contributors may be used =3)= _f (_yQmWW$#( " + * to endorse or promote products derived - W, sQQQQmZQ#Wwa].. + * from this software without specific (js, \[QQW$QWW#?!V"". + * prior written permission. ]y:.<\.. . + * -]n w/ ' [. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT )/ )/ ! + * HOLDERS AND CONTRIBUTORS "AS IS" AND ANY < (; sac , ' + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, ]^ .- % + * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF c < r + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR aga< <La + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 5% )P'-3L + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR _bQf` y`..)a + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, ,J?4P'.P"_(\?d'., + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES _Pa,)!f/<[]/ ?" + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT _2-..:. .r+_,.. . + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ?a.<%"' " -'.a_ _, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) ^ + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN + * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* + * For comments regarding functions please see the header file. + */ + +#include "guichan/actionevent.hpp" + +namespace gcn +{ + ActionEvent::ActionEvent(Widget* source, const std::string& id) + :Event(source), + mId(id) + { + + } + + ActionEvent::~ActionEvent() + { + + } + + const std::string& ActionEvent::getId() const + { + return mId; + } +} + Added: branches/qonk-opengl/guichan/guichan/actionevent.hpp =================================================================== --- branches/qonk-opengl/guichan/guichan/actionevent.hpp (rev 0) +++ branches/qonk-opengl/guichan/guichan/actionevent.hpp 2007-10-02 14:10:48 UTC (rev 118) @@ -0,0 +1,105 @@ +/* _______ __ __ __ ______ __ __ _______ __ __ + * / _____/\ / /\ / /\ / /\ / ____/\ / /\ / /\ / ___ /\ / |\/ /\ + * / /\____\// / // / // / // /\___\// /_// / // /\_/ / // , |/ / / + * / / /__ / / // / // / // / / / ___ / // ___ / // /| ' / / + * / /_// /\ / /_// / // / // /_/_ / / // / // /\_/ / // / | / / + * /______/ //______/ //_/ //_____/\ /_/ //_/ //_/ //_/ //_/ /|_/ / + * \______\/ \______\/ \_\/ \_____\/ \_\/ \_\/ \_\/ \_\/ \_\/ \_\/ + * + * Copyright (c) 2004, 2005, 2006, 2007 Olof Naess\xE9n and Per Larsson + * + * Js_./ + * Per Larsson a.k.a finalman _RqZ{a<^_aa + * Olof Naess\xE9n a.k.a jansem/yakslem _asww7!uY`> )\a// + * _Qhm`] _f "'c 1!5m + * Visit: http://guichan.darkbits.org )Qk<P ` _: :+' .' "{[ + * .)j(] .d_/ '-( P . S + * License: (BSD) <Td/Z <fP"5(\"??"\a. .L + * Redistribution and use in source and _dV>ws?a-?' ._/L #' + * binary forms, with or without )4d[#7r, . ' )d`)[ + * modification, are permitted provided _Q-5'5W..j/?' -?!\)cam' + * that the following conditions are met: j<<WP+k/);. _W=j f + * 1. Redistributions of source code must .$%w\/]Q . ."' . mj$ + * retain the above copyright notice, ]E.pYY(Q]>. a J@\ + * this list of conditions and the j(]1u<sE"L,. . ./^ ]{a + * following disclaimer. 4'_uomm\. )L);-4 (3= + * 2. Redistributions in binary form must )_]X{Z('a_"a7'<a"a, ]"[ + * reproduce the above copyright notice, #}<]m7`Za??4,P-"'7. ).m + * this list of conditions and the ]d2e)Q(<Q( ?94 b- LQ/ + * following disclaimer in the <B!</]C)d_, '(<' .f. =C+m + * documentation and/or other materials .Z!=J ]e []('-4f _ ) -.)m]' + * provided with the distribution. .w[5]' _[ /.)_-"+? _/ <W" + * 3. Neither the name of Guichan nor the :$we` _! + _/ . j? + * names of its contributors may be used =3)= _f (_yQmWW$#( " + * to endorse or promote products derived - W, sQQQQmZQ#Wwa].. + * from this software without specific (js, \[QQW$QWW#?!V"". + * prior written permission. ]y:.<\.. . + * -]n w/ ' [. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT )/ )/ ! + * HOLDERS AND CONTRIBUTORS "AS IS" AND ANY < (; sac , ' + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, ]^ .- % + * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF c < r + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR aga< <La + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 5% )P'-3L + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR _bQf` y`..)a + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, ,J?4P'.P"_(\?d'., + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES _Pa,)!f/<[]/ ?" + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT _2-..:. .r+_,.. . + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ?a.<%"' " -'.a_ _, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) ^ + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN + * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef GCN_ACTIONEVENT_HPP +#define GCN_ACTIONEVENT_HPP + +#include "guichan/event.hpp" +#include "guichan/platform.hpp" + +#include <string> + +namespace gcn +{ + class Widget; + + /** + * Represents an action event. + * + * @author Olof Naess\xE9n + * @since 0.6.0 + */ + class GCN_CORE_DECLSPEC ActionEvent: public Event + { + public: + + /** + * Constructor. + * + * @param source the source widget of the event. + * @param id the identifier of the event. + */ + ActionEvent(Widget* source, const std::string& id); + + /** + * Destructor. + */ + virtual ~ActionEvent(); + + /** + * Gets the id of the event. + * + * @return the id of the event. + */ + const std::string& getId() const; + + protected: + std::string mId; + }; +} + +#endif // GCN_ACTIONEVENT_HPP + Added: branches/qonk-opengl/guichan/guichan/actionlistener.hpp =================================================================== --- branches/qonk-opengl/guichan/guichan/actionlistener.hpp (rev 0) +++ branches/qonk-opengl/guichan/guichan/actionlistener.hpp 2007-10-02 14:10:48 UTC (rev 118) @@ -0,0 +1,98 @@ +/* _______ __ __ __ ______ __ __ _______ __ __ + * / _____/\ / /\ / /\ / /\ / ____/\ / /\ / /\ / ___ /\ / |\/ /\ + * / /\____\// / // / // / // /\___\// /_// / // /\_/ / // , |/ / / + * / / /__ / / // / // / // / / / ___ / // ___ / // /| ' / / + * / /_// /\ / /_// / // / // /_/_ / / // / // /\_/ / // / | / / + * /______/ //______/ //_/ //_____/\ /_/ //_/ //_/ //_/ //_/ /|_/ / + * \______\/ \______\/ \_\/ \_____\/ \_\/ \_\/ \_\/ \_\/ \_\/ \_\/ + * + * Copyright (c) 2004, 2005... [truncated message content] |
From: <fu...@us...> - 2007-10-12 08:50:06
|
Revision: 132 http://qonk.svn.sourceforge.net/qonk/?rev=132&view=rev Author: fursund Date: 2007-10-12 01:50:05 -0700 (Fri, 12 Oct 2007) Log Message: ----------- starting a new branch Modified Paths: -------------- branches/animated-sun/config.h.in branches/animated-sun/configure.ac branches/animated-sun/src/fonts.cpp Added Paths: ----------- branches/qonk-opengl-simple/ branches/qonk-opengl-simple/src/canvas.cpp branches/qonk-opengl-simple/src/canvas.h branches/qonk-opengl-simple/src/game.cpp branches/qonk-opengl-simple/src/main.cpp branches/qonk-opengl-simple/src/stars.cpp branches/qonk-opengl-simple/src/stars.h Removed Paths: ------------- branches/qonk-opengl/ branches/qonk-opengl-simple/src/canvas.cpp branches/qonk-opengl-simple/src/canvas.h branches/qonk-opengl-simple/src/game.cpp branches/qonk-opengl-simple/src/main.cpp branches/qonk-opengl-simple/src/stars.cpp branches/qonk-opengl-simple/src/stars.h Modified: branches/animated-sun/config.h.in =================================================================== --- branches/animated-sun/config.h.in 2007-10-12 08:47:52 UTC (rev 131) +++ branches/animated-sun/config.h.in 2007-10-12 08:50:05 UTC (rev 132) @@ -9,6 +9,9 @@ /* Define to 1 if you have the `SDL' library (-lSDL). */ #undef HAVE_LIBSDL +/* Define to 1 if you have the `SDLmain' library (-lSDLmain). */ +#undef HAVE_LIBSDLMAIN + /* Define to 1 if you have the `SDL_gfx' library (-lSDL_gfx). */ #undef HAVE_LIBSDL_GFX Modified: branches/animated-sun/configure.ac =================================================================== --- branches/animated-sun/configure.ac 2007-10-12 08:47:52 UTC (rev 131) +++ branches/animated-sun/configure.ac 2007-10-12 08:50:05 UTC (rev 132) @@ -4,6 +4,7 @@ AC_PREREQ(2.61) AC_INIT([qonk], [0.3.0], [qon...@li...]) AC_CANONICAL_TARGET + AM_INIT_AUTOMAKE AC_CONFIG_SRCDIR([src/animations.h]) @@ -20,12 +21,24 @@ AC_MSG_ERROR([No proper SDL found. Please install at least version 1.2.0!])) -# Checks for libraries. -AC_CHECK_LIB([SDL], [SDL_Init]) -AC_CHECK_LIB([SDL_ttf], [TTF_Init], ,AC_MSG_ERROR([SDL_ttf missing. Please install at least version 2.0!])) -AC_CHECK_LIB([SDL_gfx], [pixelColor], ,AC_MSG_ERROR([SDL_gfx missing. Please install at least version 1.2!])) -AC_CHECK_LIB([SDL_image], [IMG_Load], ,AC_MSG_ERROR([SDL_image missing. Please install at least version 1.2!])) +case $host in + *-*-linux*) + # Checks for libraries. + -L/usr/local/cross-tools/i386-mingw32/lib -lmingw32 -lSDLmain -lSDL -mwindows + AC_CHECK_LIB([SDLmain], [SDL_Init]) + AC_CHECK_LIB([SDL_ttf], [TTF_Init], ,AC_MSG_ERROR([SDL_ttf missing. Please install at least version 2.0!])) + AC_CHECK_LIB([SDL_gfx], [pixelColor], ,AC_MSG_ERROR([SDL_gfx missing. Please install at least version 1.2!])) + AC_CHECK_LIB([SDL_image], [IMG_Load], ,AC_MSG_ERROR([SDL_image missing. Please install at least version 1.2!]));; + *-*-mingw*) + # Checks for libraries. + AC_CHECK_LIB([SDL], [SDL_Init]) + AC_CHECK_LIB([SDL_ttf], [TTF_Init], ,AC_MSG_ERROR([SDL_ttf missing. Please install at least version 2.0!])) + AC_CHECK_LIB([SDL_gfx], [pixelColor], ,AC_MSG_ERROR([SDL_gfx missing. Please install at least version 1.2!])) + AC_CHECK_LIB([SDL_image], [IMG_Load], ,AC_MSG_ERROR([SDL_image missing. Please install at least version 1.2!]));; +esac + + # Checks for header files. AC_HEADER_STDC AC_CHECK_HEADERS([stdlib.h SDL/SDL.h SDL/SDL_gfxPrimitives.h SDL/SDL_ttf.h SDL/SDL_image.h]) Modified: branches/animated-sun/src/fonts.cpp =================================================================== --- branches/animated-sun/src/fonts.cpp 2007-10-12 08:47:52 UTC (rev 131) +++ branches/animated-sun/src/fonts.cpp 2007-10-12 08:50:05 UTC (rev 132) @@ -1,7 +1,6 @@ // Copyright 2005 by Anthony Liekens an...@li... #include "fonts.h" - #include "canvas.h" using namespace std; Copied: branches/qonk-opengl-simple (from rev 129, branches/qonk-opengl) Deleted: branches/qonk-opengl-simple/src/canvas.cpp =================================================================== --- branches/qonk-opengl/src/canvas.cpp 2007-10-09 08:31:27 UTC (rev 129) +++ branches/qonk-opengl-simple/src/canvas.cpp 2007-10-12 08:50:05 UTC (rev 132) @@ -1,470 +0,0 @@ -// Copyright 2005 by Anthony Liekens <an...@li...> -// Copyright 2007 by Robert Schuster <rob...@fs...> - -#include <SDL/SDL_gfxPrimitives.h> - -#include "canvas.h" - -#include "extensions.h" -#include "coordinate.h" -#include "settings.h" -#include "fonts.h" - -#include <math.h> - -SDL_Surface* Canvas::main = 0; -SDL_Surface* Canvas::opengl = 0; - -gcn::OpenGLGraphics *Canvas::openglGraphics = 0; - -Font* Canvas::font = 0; - -void -Canvas::alphaBlend( SDL_Surface* surface, Uint8 alpha ) { - if( alpha == 0 ) { - for( int x = 0; x < surface->w; x++ ) - for( int y = 0; y < surface->h; y++ ) { - Uint32 *bufp; - bufp = (Uint32 *)surface->pixels + y*surface->pitch/4 + x; - if( *bufp != 0 ) - *bufp &= 0x00ffffff; - } - } if( alpha != 255 ) { - for( int x = 0; x < surface->w; x++ ) - for( int y = 0; y < surface->h; y++ ) { - Uint32 *bufp; - bufp = (Uint32 *)surface->pixels + y*surface->pitch/4 + x; - if( *bufp != 0 ) { - // seperate RGB from A, update A for new value, OR them together again - Uint32 color = ( *bufp & 0x00ffffff ) | ( ( *bufp >> 24 ) * alpha >> 8 ) << 24; - *bufp = color; - } - } - } -} - -void -Canvas::drawSelector(Coordinate &c, Sint16 offset, - Sint16 width, Sint16 height, Uint8 R, Uint8 G, Uint8 B) -{ - int x1 = c.getXMapped() + offset; - int y1 = c.getYMapped() + offset; - - hlineRGBA( main, x1, x1 + 2, y1, R, G, B, 255 ); - hlineRGBA( main, x1 + width - 2, x1 + width, y1, R, G, B, 255 ); - hlineRGBA( main, x1, x1 + 2, y1 + height, R, G, B, 255 ); - hlineRGBA( main, x1 + width - 2, x1 + width, y1 + height, R, G, B, 255 ); - vlineRGBA( main, x1, y1, y1 + 2, R, G, B, 255 ); - vlineRGBA( main, x1, y1 + height, y1 + height - 2, R, G, B, 255 ); - vlineRGBA( main, x1 + width, y1, y1 + 2, R, G, B, 255 ); - vlineRGBA( main, x1 + width, y1 + height, y1 + height - 2, R, G, B, 255 ); -} - -void -Canvas::drawNearestPlanetSelector(Coordinate &c, int size) -{ - size *= 3; - int offset = -size/2; - - drawSelector(c, offset, size, size, 255, 0, 0); -} - -void -Canvas::drawPlanet( Coordinate &loc, int size, Uint32 color ) { - drawPlanetMapped(loc.getXMapped(), loc.getYMapped(), size, color); -} - -void -Canvas::drawPlanetMapped(int x, int y, int size, Uint32 color ) { - int R = getRed(color); - int G = getGreen(color); - int B = getBlue(color); - - filledCircleRGBA( main, x, y, size + 2, 0, 0, 0, 128 ); - filledCircleRGBA( main, x, y, size, R, G, B, 255 ); - aacircleRGBA( main, x, y, size, R, G, B, 255 ); - filledEllipseRGBA( main, x, y - size / 2, size, size / 2, 255 - 4 * ( 255 - R ) / 5, 255 - 4 * ( 255 - G ) / 5, 255 - 4 * ( 255 - B ) / 5, 255 ); - aaellipseRGBA( main, x, y - size / 2, size, size / 2, 255 - 4 * ( 255 - R ) / 5, 255 - 4 * ( 255 - G ) / 5, 255 - 4 * ( 255 - B ) / 5, 255 ); -} - -void -Canvas::drawResidentShip(Coordinate& shipLocation, Coordinate& planetLocation, - int color) { - int sx = shipLocation.getXMapped(); - int sy = shipLocation.getYMapped(); - - int px = planetLocation.getXMapped(); - int py = planetLocation.getYMapped(); - - int r = getRed(color); - int g = getGreen(color); - int b = getBlue(color); - - aalineRGBA(main, sx, sy, px, py, r, g, b, 64); - filledCircleRGBA(main, sx, sy, 1, r, g, b, 255); -} - -void -Canvas::drawFlyingShip(Coordinate& shipLocation, double direction, int color) -{ - int sx = shipLocation.getXMapped(); - int sy = shipLocation.getYMapped(); - - int r = getRed(color); - int g = getGreen(color); - int b = getBlue(color); - - int headX, headY; - int leftTipX, leftTipY; - int rightTipX, rightTipY; - - headX = (int) (sx + 5.0 * cos( direction)); - headY = (int) (sy + 5.0 * sin( direction)); - leftTipX = (int) (sx + 2.0 * cos( direction + M_PI / 3.0)); - leftTipY = (int) (sy + 2.0 * sin( direction + M_PI / 3.0)); - rightTipX = (int) (sx + 2.0 * cos( direction - M_PI / 3.0)); - rightTipY = (int) (sy + 2.0 * sin( direction - M_PI / 3.0)); - - aalineRGBA(main, leftTipX, leftTipY, headX, headY, r, g, b, 255); - aalineRGBA(main, rightTipX, rightTipY, headX, headY, r, g, b, 255); - aalineRGBA(main, rightTipX, rightTipY, leftTipX, leftTipY, r, g, b, 255); -} - -void -Canvas::drawSelection(Coordinate& location) -{ - aacircleRGBA(main, location.getXMapped(), location.getYMapped(), 3, 255, 192, 0, 255 ); -} - -void -Canvas::drawOrbit(Coordinate ¢er, double rotationDistance, int color) -{ - int r = getRed(color); - int g = getGreen(color); - int b = getBlue(color); - - aaellipseRGBA(main, center.getXMapped(), center.getYMapped(), - (int) (rotationDistance * Settings::getGameWidth()), - (int) (rotationDistance * Settings::getGameHeight()), - r, g, b, 64); -} - -void -Canvas::drawBuildProgress(Coordinate& location, int size, double percentage) -{ - - - int x = location.getXMapped(); - int y = location.getYMapped(); - glEnable(GL_BLEND); - glColor4f (1,1,1, (int)( 0.2 * percentage )/255); - int radius = (int) (size + 102.5 - percentage); - double y1=y+radius; - double x1=x; - glBegin(GL_LINE_STRIP); - for(double angle=0.0f;angle<=(2.0f*3.14159);angle+=0.01f) - { - glLineWidth(3); - double x2=x+(radius*(float)sin((double)angle)); - double y2=y+(radius*(float)cos((double)angle)); - glVertex2d(x1,y1); - y1=y2; - x1=x2; - } - glEnd(); - glDisable(GL_BLEND); -// aacircleRGBA( main, location.getXMapped(), location.getYMapped(), -// (int) (size + 102.5 - percentage), -// 0xff, 0xff, 0xff, -// (int)( 0.2 * percentage )); -} - -void -Canvas::drawText(int x, int y, const char *msg, int r, int g, int b, int a) -{ - - font->render(main, x, y, msg, r, g, b, a); -} - -void -Canvas::drawBox(int x, int y, int w, int h, int r, int g, int b) -{ - glBegin(GL_QUADS); - glColor3f(r,g,b); - glVertex3f(x, y, 1.0); - glVertex3f(x+w, y, 1.0); - glVertex3f(x+w, y+h, 1.0); - glVertex3f(x,y+h, 1.0); - glEnd();//( main, x, y, w, h, r, g, b, 255 ); -} - -int -Canvas::getFontHeight() -{ - return font->getHeight(); -} - -void -Canvas::drawRadar() -{ - int radarSteps = 4; - Uint32 radarColor = 0xfee190; - double x = Settings::getGameOffsetX() + Settings::getGameWidth() / 2; - double y = Settings::getGameHeight() / 2; - - double s = 1.0 / radarSteps; - for( int i = 1; i <= radarSteps; i++ ) { - glEnable(GL_BLEND); - glColor4f(144/255, 225/255, 144/255, 64/255); - int radius = (int)( i * s * Settings::getGameHeight() / 2 ); - double y1=y+radius; - double x1=x; - glBegin(GL_LINE_STRIP); - for(double angle=0.0f;angle<=(2.0f*3.14159);angle+=0.01f) - { - glLineWidth(3); - double x2=x+(radius*(float)sin((double)angle)); - double y2=y+(radius*(float)cos((double)angle)); - glVertex2d(x1,y1); - y1=y2; - x1=x2; - } - glEnd(); - glDisable(GL_BLEND); - - //aaellipseRGBA( main, Settings::getGameOffsetX() + Settings::getGameWidth() / 2, - // Settings::getGameHeight() / 2, (int) (i * s * Settings::getGameWidth() / 2), - // (int)( i * s * Settings::getGameHeight() / 2 ), 144, 225, 144, 64 ); - } -// lineRGBA( main, -// Settings::getGameOffsetX() + Settings::getGameWidth() / 2, 0, -// Settings::getGameOffsetX() + Settings::getGameWidth() / 2, -// Settings::getGameHeight(), 255, 225, 144, 64 ); -// lineRGBA( main, -// Settings::getGameOffsetX(), -// Settings::getGameHeight() / 2, -// Settings::getGameOffsetX() + Settings::getGameWidth(), -// Settings::getGameHeight() / 2, 255, 225, 144, 64 ); -} - -//void -//Canvas::drawSun() -//{ -// // Sun in the middle -// Sint16 x0 = Settings::getGameOffsetX() + Settings::getGameWidth() / 2; -// Sint16 y0 = Settings::getGameHeight() / 2; - -// static Counter counter(1000); //number of frames per cycle -// int amplitude = 3; - -// double phase = static_cast<double>(counter.getCountMax())/8; -// double p0 = sin( 2*M_PI * ( counter.getCount() - 0*phase )/( counter.getCountMax() ) ); -// double p1 = sin( 2*M_PI * ( counter.getCount() - 1*phase )/( counter.getCountMax() ) ); -// double p2 = sin( 2*M_PI * ( counter.getCount() - 2*phase )/( counter.getCountMax() ) ); -// double p3 = sin( 2*M_PI * ( counter.getCount() - 3*phase )/( counter.getCountMax() ) ); - -// counter.increment(); - -// filledTrigonRGBA( main, x0+5, y0, x0-5,y0, x0, y0+15 + amplitude*p0, 255, 205, 0, 255); -// filledTrigonRGBA( main, x0+5, y0, x0-5,y0, x0, y0-15 + amplitude*p2, 255, 205, 0, 255); -// filledTrigonRGBA( main, x0+15 + amplitude*p1, y0, x0,y0+5, x0, y0-5, 255, 205, 0, 255); -// filledTrigonRGBA( main, x0-15 + amplitude*p3, y0, x0,y0+5, x0, y0-5, 255, 205, 0, 255); - -// filledTrigonRGBA( main, x0+10, y0-10, x0+5,y0, x0, y0-5, 255, 205, 0, 255); -// filledTrigonRGBA( main, x0-10, y0-10, x0-5,y0, x0, y0-5, 255, 205, 0, 255); -// filledTrigonRGBA( main, x0+10, y0+10, x0+5,y0, x0, y0+5, 255, 205, 0, 255); -// filledTrigonRGBA( main, x0-10, y0+10, x0-5,y0, x0, y0+5, 255, 205, 0, 255); - -// filledCircleRGBA( main, x0,y0, 7, 255, 255, 0, 255 ); -// filledCircleRGBA( main, x0,y0, 6, 255, 245, 0, 255 ); -// filledCircleRGBA( main, x0,y0, 5, 255, 225, 0, 255 ); -// filledCircleRGBA( main, x0,y0, 4, 255, 205, 0, 255 ); -//} - -/** Little star drawn in the background. - * - */ -void -Canvas::drawStar(int x, int y, int brightness) -{ - glEnable(GL_BLEND); - glBegin(GL_POINTS); - glColor4f((brightness + rand() % 64)/255,(brightness + rand() % 64)/255,(brightness + rand() % 64)/255,1); - glVertex2d(x,y); - glEnd(); - glDisable(GL_BLEND); - //pixelRGBA( main, x, y, brightness + rand() % 64, brightness + rand() % 64, brightness + rand() % 64, 255 ); - -} - -void -Canvas::drawSonar(Coordinate coord, int size, double percentage, int r, int g, int b, bool circle) -{ - int x = coord.getXMapped(); - int y = coord.getYMapped(); - glEnable(GL_BLEND); - glColor4f (r/255, g/255, b/255, ( ( 255 - 255 * percentage ) * 0.05 )/255); - int radius = (int)( size * sin( percentage * M_PI ) ); - double y1=y+radius; - double x1=x; - glBegin(GL_LINE_STRIP); - for(double angle=0.0f;angle<=(2.0f*3.14159);angle+=0.01f) - { - glLineWidth(3); - double x2=x+(radius*(float)sin((double)angle)); - double y2=y+(radius*(float)cos((double)angle)); - glVertex2d(x1,y1); - y1=y2; - x1=x2; - } - glEnd(); - glDisable(GL_BLEND); - //filledCircleRGBA( main, x, y, (int)( size * sin( percentage * M_PI ) ), r, g, b, (int)( ( 255 - 255 * percentage ) * 0.05 ) ); - - //if( circle ) - // aacircleRGBA( main, x, y, (int)( size * sin( percentage * M_PI ) ), r, g, b, 255 - (int)( 255 * percentage ) ); - -} - -void -Canvas::drawPlayerStat(int size, int index, int previousValue, int currentValue, int r, int g, int b) -{ - int w = Settings::getScreenWidth(); - int h = Settings::getScreenHeight(); - - glBegin(GL_LINE_STRIP); - glLineWidth(5); - glEnable(GL_BLEND); - glColor4f (r, g, b, index * 2); - glVertex2d(w - size + index - 1,h - previousValue); - glVertex2d( w - size + index,h - currentValue); - glEnd(); - //aalineRGBA( main, w - size + index - 1, h - previousValue, w - size + index, h - currentValue, r, g, b, index * 2 ); -} - -void -Canvas::drawMouseSelection(Coordinate &c1, Coordinate &c2) -{ - int y1 = (c1.getYMapped()-Settings::getScreenHeight())*(-1); - int y2 = (c2.getYMapped()-Settings::getScreenHeight())*(-1); - if(y1 < 0) - y1 = 0; - if(y2 < 0) - y2 = 0; - if(y2 > Settings::getScreenHeight()) - y2 = Settings::getScreenHeight(); - if(y1 > Settings::getScreenHeight()) - y1 = Settings::getScreenHeight(); - c1.setYMapped(y1); - c2.setYMapped(y2); - glEnable(GL_BLEND); - glBegin(GL_LINE_LOOP); - glColor4f(1,1,1, 1); - glVertex2d(c2.getXMapped(), c2.getYMapped()); - glVertex2d(c1.getXMapped(), c2.getYMapped()); - glVertex2d(c1.getXMapped(), c1.getYMapped()); - glVertex2d(c2.getXMapped(),c1.getYMapped()); - glEnd(); - glDisable(GL_BLEND); - //rectangleColor( main, c1.getXMapped(), c1.getYMapped(), c2.getXMapped(), c2.getYMapped(), 0xfee19080 ); -} - -void -Canvas::drawCursor(int x, int y) -{ - y = (y-Settings::getScreenHeight())*(-1); - glEnable(GL_BLEND); - glColor4f (1.0, 1.0, 1.0, 1.0); - double radius = 6; - double y1=y+radius; - double x1=x; - glBegin(GL_LINE_STRIP); - for(double angle=0.0f;angle<=(2.0f*3.14159);angle+=0.01f) - { - glLineWidth(3); - double x2=x+(radius*(float)sin((double)angle)); - double y2=y+(radius*(float)cos((double)angle)); - glVertex2d(x1,y1); - y1=y2; - x1=x2; - } - glEnd(); - glDisable(GL_BLEND); - //aacircleRGBA( main, x,y, 4, 255, 255, 255, 255 ); -} - -void -Canvas::glEnable2d() -{ - int vPort[4]; - glGetIntegerv(GL_VIEWPORT, vPort); - - glMatrixMode(GL_PROJECTION); - glPushMatrix(); - glLoadIdentity(); - - glOrtho(0, vPort[2], 0, vPort[3], -1, 1); - glMatrixMode(GL_MODELVIEW); - glPushMatrix(); - glLoadIdentity(); - glDisable(GL_DEPTH_TEST); -} - -void -Canvas::glDisable2d() -{ - glEnable(GL_DEPTH_TEST); - - glMatrixMode(GL_PROJECTION); - glPopMatrix(); - glMatrixMode(GL_MODELVIEW); - glPopMatrix(); -} - -void -Canvas::initScreen() -{ - if (!openglGraphics) - openglGraphics = new gcn::OpenGLGraphics(); - - if (!font) - font = new Font("font.ttf", 18); - - SDL_GL_SetAttribute( SDL_GL_RED_SIZE, 5 ); - SDL_GL_SetAttribute( SDL_GL_GREEN_SIZE, 5 ); - SDL_GL_SetAttribute( SDL_GL_BLUE_SIZE, 5 ); - SDL_GL_SetAttribute( SDL_GL_DEPTH_SIZE, 16 ); - SDL_GL_SetAttribute( SDL_GL_DOUBLEBUFFER, 1 ); - - - long flags = SDL_SWSURFACE | SDL_HWSURFACE | SDL_OPENGL; - if (Settings::getFullscreen()) - flags |= SDL_FULLSCREEN; - - main = SDL_SetVideoMode( Settings::getScreenWidth(), Settings::getScreenHeight(), 0, flags); - - openglGraphics->setTargetPlane(Settings::getScreenWidth(), Settings::getScreenHeight()); -} - -void -Canvas::shutdown() -{ - delete openglGraphics; - SDL_FreeSurface(main); - main = NULL; -} - -void -Canvas::updateScreen() -{ - - glFlush(); - glFinish(); - SDL_GL_SwapBuffers(); -} - -gcn::OpenGLGraphics * -Canvas::getOpenGLGraphics() -{ - return openglGraphics; -} Copied: branches/qonk-opengl-simple/src/canvas.cpp (from rev 131, branches/qonk-opengl/src/canvas.cpp) =================================================================== --- branches/qonk-opengl-simple/src/canvas.cpp (rev 0) +++ branches/qonk-opengl-simple/src/canvas.cpp 2007-10-12 08:50:05 UTC (rev 132) @@ -0,0 +1,553 @@ +// Copyright 2005 by Anthony Liekens <an...@li...> +// Copyright 2007 by Robert Schuster <rob...@fs...> + +#include <SDL/SDL_gfxPrimitives.h> + +#include "canvas.h" + +#include "extensions.h" +#include "coordinate.h" +#include "settings.h" +#include "fonts.h" + +#include <math.h> + +SDL_Surface* Canvas::main = 0; +SDL_Surface* Canvas::opengl = 0; + +gcn::OpenGLGraphics *Canvas::openglGraphics = 0; + +Font* Canvas::font = 0; + +void +Canvas::alphaBlend( SDL_Surface* surface, Uint8 alpha ) { + if( alpha == 0 ) { + for( int x = 0; x < surface->w; x++ ) + for( int y = 0; y < surface->h; y++ ) { + Uint32 *bufp; + bufp = (Uint32 *)surface->pixels + y*surface->pitch/4 + x; + if( *bufp != 0 ) + *bufp &= 0x00ffffff; + } + } if( alpha != 255 ) { + for( int x = 0; x < surface->w; x++ ) + for( int y = 0; y < surface->h; y++ ) { + Uint32 *bufp; + bufp = (Uint32 *)surface->pixels + y*surface->pitch/4 + x; + if( *bufp != 0 ) { + // seperate RGB from A, update A for new value, OR them together again + Uint32 color = ( *bufp & 0x00ffffff ) | ( ( *bufp >> 24 ) * alpha >> 8 ) << 24; + *bufp = color; + } + } + } +} + +void +Canvas::drawSelector(Coordinate &c, Sint16 offset, + Sint16 width, Sint16 height, Uint8 R, Uint8 G, Uint8 B) +{ + int x1 = c.getXMapped() + offset; + int y1 = ((c.getYMapped()-Settings::getScreenHeight())*(-1)) + offset; + + glColor4f(1.0f,1.0f,0.0f,1.0f); + + glBegin(GL_LINE_STRIP); + glVertex2d(x1, y1); + glVertex2d(x1+2, y1); + glVertex2d(x1 + width - 2, y1); + glVertex2d(x1 + width , y1); + glVertex2d(x1, y1 + height); + glVertex2d(x1+2, y1 + height); + glVertex2d(x1 + width - 2, y1 + height); + glVertex2d(x1 + width, y1 + height); + glVertex2d(x1, y1); + glVertex2d(x1, y1+2); + glVertex2d(x1, y1 + height); + glVertex2d(x1, y1 + height - 2); + glVertex2d(x1 + width, y1); + glVertex2d(x1 + width, y1 + 2); + glVertex2d(x1 + width, y1 + height); + glVertex2d(x1 + width, y1 + height - 2); + glEnd(); +} + +void +Canvas::drawNearestPlanetSelector(Coordinate &c, int size) +{ + size *= 3; + int offset = -size/2; + + drawSelector(c, offset, size, size, 255, 0, 0); +} + +void +Canvas::drawPlanet( Coordinate &loc, int size, Uint32 color ) { + drawPlanetMapped(loc.getXMapped(), (loc.getYMapped()-Settings::getScreenHeight())*(-1), size, color); +} + +void +Canvas::drawPlanetMapped(int x, int y, int size, Uint32 color ) { + float R = (float) getRed(color)/255.0f; + float G = (float) getGreen(color)/255.0f; + float B = (float) getBlue(color)/255.0f; + + glEnable(GL_BLEND); + glColor4f (R, G, B, 1.0f); + int radius = size; + double y1=y+radius; + double x1=x; + glBegin(GL_TRIANGLE_FAN); + for(double angle=0.0f;angle<=(2.0f*3.14159);angle+=0.01f) + { + //glLineWidth(3); + double x2=x+(radius*(float)sin((double)angle)); + double y2=y+(radius*(float)cos((double)angle)); + glVertex2d(x1,y1); + glVertex2d(x2,y2); + glVertex2d(x,y); + y1=y2; + x1=x2; + } + glEnd(); + glDisable(GL_BLEND); + +} + +void +Canvas::drawResidentShip(Coordinate& shipLocation, Coordinate& planetLocation, + int color) { + int sx = shipLocation.getXMapped(); + int sy = (shipLocation.getYMapped()-Settings::getScreenHeight())*(-1); + + int px = planetLocation.getXMapped(); + int py = (planetLocation.getYMapped()-Settings::getScreenHeight())*(-1); + + float R = (float) getRed(color)/255.0f; + float G = (float) getGreen(color)/255.0f; + float B = (float) getBlue(color)/255.0f; + + + glColor4f(R,G,B,0.4f); + + glBegin(GL_LINE_STRIP); + glVertex2d(sx, sy); + glVertex2d(px, py); + glEnd(); + + + glEnable(GL_BLEND); + glColor4f (R, G, B, 1.0f); + int radius = 1; + double y1=sy+radius; + double x1=sx; + glBegin(GL_TRIANGLE_FAN); + for(double angle=0.0f;angle<=(2.0f*3.14159);angle+=0.01f) + { + //glLineWidth(3); + double x2=sx+(radius*(float)sin((double)angle)); + double y2=sy+(radius*(float)cos((double)angle)); + glVertex2d(x1,y1); + glVertex2d(x2,y2); + glVertex2d(sx,sy); + y1=y2; + x1=x2; + } + glEnd(); + glDisable(GL_BLEND); + + //aalineRGBA(main, sx, sy, px, py, r, g, b, 64); + //filledCircleRGBA(main, sx, sy, 1, r, g, b, 255); +} + +void +Canvas::drawFlyingShip(Coordinate& shipLocation, double direction, int color) +{ + int sx = shipLocation.getXMapped(); + int sy = (shipLocation.getYMapped()-Settings::getScreenHeight())*(-1); + + float R = (float) getRed(color)/255.0f; + float G = (float) getGreen(color)/255.0f; + float B = (float) getBlue(color)/255.0f; + + int headX, headY; + int leftTipX, leftTipY; + int rightTipX, rightTipY; + + headX = (int) (sx + 5.0 * cos( direction)); + headY = (int) (sy + 5.0 * sin( direction)); + leftTipX = (int) (sx + 2.0 * cos( direction + M_PI / 3.0)); + leftTipY = (int) (sy + 2.0 * sin( direction + M_PI / 3.0)); + rightTipX = (int) (sx + 2.0 * cos( direction - M_PI / 3.0)); + rightTipY = (int) (sy + 2.0 * sin( direction - M_PI / 3.0)); + + glColor4f(R,G,B,1.0f); + + glBegin(GL_LINE_STRIP); + glVertex2d(leftTipX, leftTipY); + glVertex2d(headX, headY); + glVertex2d(rightTipX, rightTipY); + glVertex2d(headX, headY); + glVertex2d(rightTipX, rightTipY); + glVertex2d(leftTipX, leftTipY); + glEnd(); +} + +void +Canvas::drawSelection(Coordinate& location) +{ + int x = location.getXMapped(); + int y = (location.getYMapped()-Settings::getScreenHeight())*(-1); + glEnable(GL_BLEND); + glColor4f (1.0f, 0.75f , 0, 1.0f); + int radius = 3; + double y1=y+radius; + double x1=x; + glBegin(GL_LINE_STRIP); + for(double angle=0.0f;angle<=(2.0f*3.14159);angle+=0.01f) + { + glLineWidth(3); + double x2=x+(radius*(float)sin((double)angle)); + double y2=y+(radius*(float)cos((double)angle)); + glVertex2d(x1,y1); + y1=y2; + x1=x2; + } + glEnd(); + glDisable(GL_BLEND); + //aacircleRGBA(main, location.getXMapped(), location.getYMapped(), 3, 255, 192, 0, 255 ); +} + +void +Canvas::drawOrbit(Coordinate ¢er, double rotationDistance, int color) +{ + int r = getRed(color); + int g = getGreen(color); + int b = getBlue(color); + +// aaellipseRGBA(main, center.getXMapped(), center.getYMapped(), +// (int) (rotationDistance * Settings::getGameWidth()), +// (int) (rotationDistance * Settings::getGameHeight()), +// r, g, b, 64); +} + +void +Canvas::drawBuildProgress(Coordinate& location, int size, double percentage) +{ + + + int x = location.getXMapped(); + int y = (location.getYMapped()-Settings::getScreenHeight())*(-1); + glEnable(GL_BLEND); + float fade = (float)( 0.2 * percentage/255.0f); + glColor4f (1.0f,1.0f,1.0f, fade ); + int radius = (int) (size + 102.5 - percentage); + double y1=y+radius; + double x1=x; + glBegin(GL_LINE_STRIP); + for(double angle=0.0f;angle<=(2.0f*3.14159);angle+=0.01f) + { + glLineWidth(3); + double x2=x+(radius*(float)sin((double)angle)); + double y2=y+(radius*(float)cos((double)angle)); + glVertex2d(x1,y1); + y1=y2; + x1=x2; + } + glEnd(); + glDisable(GL_BLEND); +// aacircleRGBA( main, location.getXMapped(), location.getYMapped(), +// (int) (size + 102.5 - percentage), +// 0xff, 0xff, 0xff, +// (int)( 0.2 * percentage )); +} + +void +Canvas::drawText(int x, int y, const char *msg, int r, int g, int b, int a) +{ + + font->render(main, x, y, msg, r, g, b, a); +} + +void +Canvas::drawBox(int x, int y, int w, int h, int r, int g, int b) +{ + glBegin(GL_QUADS); + glColor3f(r,g,b); + glVertex3f(x, y, 1.0); + glVertex3f(x+w, y, 1.0); + glVertex3f(x+w, y+h, 1.0); + glVertex3f(x,y+h, 1.0); + glEnd();//( main, x, y, w, h, r, g, b, 255 ); +} + +int +Canvas::getFontHeight() +{ + return font->getHeight(); +} + +void +Canvas::drawRadar() +{ + int radarSteps = 4; + Uint32 radarColor = 0xfee190; + double x = Settings::getGameOffsetX() + Settings::getGameWidth() / 2; + double y = Settings::getGameHeight() / 2; + + double s = 1.0 / radarSteps; + for( int i = 1; i <= radarSteps; i++ ) { + glEnable(GL_BLEND); + glColor4f(1.0f, 1.0f, 1.0f, 1.0f); + int radius = (int)( i * s * Settings::getGameHeight() / 2 ); + double y1=y+radius; + double x1=x; + glBegin(GL_LINE_STRIP); + for(double angle=0.0f;angle<=(2.0f*3.14159);angle+=0.01f) + { + glLineWidth(3); + double x2=x+(radius*(float)sin((double)angle)); + double y2=y+(radius*(float)cos((double)angle)); + glVertex2d(x1,y1); + y1=y2; + x1=x2; + } + glEnd(); + glDisable(GL_BLEND); + + //aaellipseRGBA( main, Settings::getGameOffsetX() + Settings::getGameWidth() / 2, + // Settings::getGameHeight() / 2, (int) (i * s * Settings::getGameWidth() / 2), + // (int)( i * s * Settings::getGameHeight() / 2 ), 144, 225, 144, 64 ); + } +// lineRGBA( main, +// Settings::getGameOffsetX() + Settings::getGameWidth() / 2, 0, +// Settings::getGameOffsetX() + Settings::getGameWidth() / 2, +// Settings::getGameHeight(), 255, 225, 144, 64 ); +// lineRGBA( main, +// Settings::getGameOffsetX(), +// Settings::getGameHeight() / 2, +// Settings::getGameOffsetX() + Settings::getGameWidth(), +// Settings::getGameHeight() / 2, 255, 225, 144, 64 ); +} + +//void +//Canvas::drawSun() +//{ +// // Sun in the middle +// Sint16 x0 = Settings::getGameOffsetX() + Settings::getGameWidth() / 2; +// Sint16 y0 = Settings::getGameHeight() / 2; + +// static Counter counter(1000); //number of frames per cycle +// int amplitude = 3; + +// double phase = static_cast<double>(counter.getCountMax())/8; +// double p0 = sin( 2*M_PI * ( counter.getCount() - 0*phase )/( counter.getCountMax() ) ); +// double p1 = sin( 2*M_PI * ( counter.getCount() - 1*phase )/( counter.getCountMax() ) ); +// double p2 = sin( 2*M_PI * ( counter.getCount() - 2*phase )/( counter.getCountMax() ) ); +// double p3 = sin( 2*M_PI * ( counter.getCount() - 3*phase )/( counter.getCountMax() ) ); + +// counter.increment(); + +// filledTrigonRGBA( main, x0+5, y0, x0-5,y0, x0, y0+15 + amplitude*p0, 255, 205, 0, 255); +// filledTrigonRGBA( main, x0+5, y0, x0-5,y0, x0, y0-15 + amplitude*p2, 255, 205, 0, 255); +// filledTrigonRGBA( main, x0+15 + amplitude*p1, y0, x0,y0+5, x0, y0-5, 255, 205, 0, 255); +// filledTrigonRGBA( main, x0-15 + amplitude*p3, y0, x0,y0+5, x0, y0-5, 255, 205, 0, 255); + +// filledTrigonRGBA( main, x0+10, y0-10, x0+5,y0, x0, y0-5, 255, 205, 0, 255); +// filledTrigonRGBA( main, x0-10, y0-10, x0-5,y0, x0, y0-5, 255, 205, 0, 255); +// filledTrigonRGBA( main, x0+10, y0+10, x0+5,y0, x0, y0+5, 255, 205, 0, 255); +// filledTrigonRGBA( main, x0-10, y0+10, x0-5,y0, x0, y0+5, 255, 205, 0, 255); + +// filledCircleRGBA( main, x0,y0, 7, 255, 255, 0, 255 ); +// filledCircleRGBA( main, x0,y0, 6, 255, 245, 0, 255 ); +// filledCircleRGBA( main, x0,y0, 5, 255, 225, 0, 255 ); +// filledCircleRGBA( main, x0,y0, 4, 255, 205, 0, 255 ); +//} + +/** Little star drawn in the background. + * + */ +void +Canvas::drawStar(int x, int y, float brightness) +{ + glEnable(GL_BLEND); + glBegin(GL_POINTS); + glColor4f(1.0f, 1.0f, 1.0f,brightness); + glVertex2d(x,y); + glEnd(); + glDisable(GL_BLEND); + //pixelRGBA( main, x, y, brightness + rand() % 64, brightness + rand() % 64, brightness + rand() % 64, 255 ); + +} + +void +Canvas::drawSonar(Coordinate coord, int size, double percentage, int r, int g, int b, bool circle) +{ + int x = coord.getXMapped(); + int y = (coord.getYMapped()-Settings::getScreenHeight())*(-1); + glEnable(GL_BLEND); + glColor4f (1.0f, 1.0f, 1.0f, 1.0f); + int radius = (int)( size * sin( percentage * M_PI ) ); + double y1=y+radius; + double x1=x; + glBegin(GL_LINE_STRIP); + for(double angle=0.0f;angle<=(2.0f*3.14159);angle+=0.01f) + { + glLineWidth(3); + double x2=x+(radius*(float)sin((double)angle)); + double y2=y+(radius*(float)cos((double)angle)); + glVertex2d(x1,y1); + y1=y2; + x1=x2; + } + glEnd(); + glDisable(GL_BLEND); + //filledCircleRGBA( main, x, y, (int)( size * sin( percentage * M_PI ) ), r, g, b, (int)( ( 255 - 255 * percentage ) * 0.05 ) ); + + //if( circle ) + // aacircleRGBA( main, x, y, (int)( size * sin( percentage * M_PI ) ), r, g, b, 255 - (int)( 255 * percentage ) ); + +} + +void +Canvas::drawPlayerStat(int size, int index, int previousValue, int currentValue, int r, int g, int b) +{ + int w = Settings::getScreenWidth(); + int h = Settings::getScreenHeight(); + + glBegin(GL_LINE_STRIP); + glLineWidth(5); + glEnable(GL_BLEND); + glColor4f (r, g, b, index * 2); + glVertex2d(w - size + index - 1,h - previousValue); + glVertex2d( w - size + index,h - currentValue); + glEnd(); + //aalineRGBA( main, w - size + index - 1, h - previousValue, w - size + index, h - currentValue, r, g, b, index * 2 ); +} + +void +Canvas::drawMouseSelection(Coordinate &c1, Coordinate &c2) +{ +// int y1 = (c1.getYMapped()-Settings::getScreenHeight())*(-1); +// int y2 = (c2.getYMapped()-Settings::getScreenHeight())*(-1); +// if(y1 < 0) +// y1 = 0; +// if(y2 < 0) +// y2 = 0; +// if(y2 > Settings::getScreenHeight()) +// y2 = Settings::getScreenHeight(); +// if(y1 > Settings::getScreenHeight()) +// y1 = Settings::getScreenHeight(); +// c1.setYMapped(y1); +// c2.setYMapped(y2); + glEnable(GL_BLEND); + glBegin(GL_LINE_LOOP); + glColor4f(1,1,1, 1); + glVertex2d(c2.getXMapped(), (c2.getYMapped()-Settings::getScreenHeight())*(-1)); + glVertex2d(c1.getXMapped(), (c2.getYMapped()-Settings::getScreenHeight())*(-1)); + glVertex2d(c1.getXMapped(), (c1.getYMapped()-Settings::getScreenHeight())*(-1)); + glVertex2d(c2.getXMapped(), (c1.getYMapped()-Settings::getScreenHeight())*(-1)); + glEnd(); + glDisable(GL_BLEND); + //rectangleColor( main, c1.getXMapped(), c1.getYMapped(), c2.getXMapped(), c2.getYMapped(), 0xfee19080 ); +} + +void +Canvas::drawCursor(int x, int y) +{ + y = (y-Settings::getScreenHeight())*(-1); + glEnable(GL_BLEND); + glColor4f (1.0, 1.0, 1.0, 1.0); + double radius = 6; + double y1=y+radius; + double x1=x; + glBegin(GL_LINE_STRIP); + for(double angle=0.0f;angle<=(2.0f*3.14159);angle+=0.01f) + { + glLineWidth(3); + double x2=x+(radius*(float)sin((double)angle)); + double y2=y+(radius*(float)cos((double)angle)); + glVertex2d(x1,y1); + y1=y2; + x1=x2; + } + glEnd(); + glDisable(GL_BLEND); + //aacircleRGBA( main, x,y, 4, 255, 255, 255, 255 ); +} + +void +Canvas::glEnable2d() +{ + int vPort[4]; + glGetIntegerv(GL_VIEWPORT, vPort); + + glMatrixMode(GL_PROJECTION); + glPushMatrix(); + glLoadIdentity(); + + glOrtho(0, vPort[2], 0, vPort[3], -1, 1); + glMatrixMode(GL_MODELVIEW); + glPushMatrix(); + glLoadIdentity(); + glDisable(GL_DEPTH_TEST); +} + +void +Canvas::glDisable2d() +{ + glEnable(GL_DEPTH_TEST); + + glMatrixMode(GL_PROJECTION); + glPopMatrix(); + glMatrixMode(GL_MODELVIEW); + glPopMatrix(); +} + +void +Canvas::initScreen() +{ + if (!openglGraphics) + openglGraphics = new gcn::OpenGLGraphics(); + + if (!font) + font = new Font("font.ttf", 18); + + SDL_GL_SetAttribute( SDL_GL_RED_SIZE, 5 ); + SDL_GL_SetAttribute( SDL_GL_GREEN_SIZE, 5 ); + SDL_GL_SetAttribute( SDL_GL_BLUE_SIZE, 5 ); + SDL_GL_SetAttribute( SDL_GL_DEPTH_SIZE, 16 ); + SDL_GL_SetAttribute( SDL_GL_DOUBLEBUFFER, 1 ); + + + long flags = SDL_SWSURFACE | SDL_HWSURFACE | SDL_OPENGL; + if (Settings::getFullscreen()) + flags |= SDL_FULLSCREEN; + + main = SDL_SetVideoMode( Settings::getScreenWidth(), Settings::getScreenHeight(), 0, flags); + + openglGraphics->setTargetPlane(Settings::getScreenWidth(), Settings::getScreenHeight()); +} + +void +Canvas::shutdown() +{ + delete openglGraphics; + SDL_FreeSurface(main); + main = NULL; +} + +void +Canvas::updateScreen() +{ + + glFlush(); + glFinish(); + SDL_GL_SwapBuffers(); +} + +gcn::OpenGLGraphics * +Canvas::getOpenGLGraphics() +{ + return openglGraphics; +} Deleted: branches/qonk-opengl-simple/src/canvas.h =================================================================== --- branches/qonk-opengl/src/canvas.h 2007-10-09 08:31:27 UTC (rev 129) +++ branches/qonk-opengl-simple/src/canvas.h 2007-10-12 08:50:05 UTC (rev 132) @@ -1,89 +0,0 @@ -// Copyright 2007 by Robert Schuster <rob...@fs...> - -// Basic drawing and converting operations for Qonk - -// If not explicitly told otherwise coordinate values are -// in game units. - -#ifndef CANVAS_H -#define CANVAS_H - -#include <SDL/SDL.h> - -#include "guichan/guichan/sdl.hpp" -#include "guichan/guichan/opengl.hpp" - -class Coordinate; -class Font; - -class Canvas -{ - public: - static void alphaBlend( SDL_Surface* surface, Uint8 alpha ); - - static void drawSelector( Coordinate&, Sint16 offset, - Sint16 width, Sint16 height, - Uint8 R, Uint8 G, Uint8 B ); - - static void drawNearestPlanetSelector(Coordinate&, int); - - static void drawPlanet(Coordinate&, int size, Uint32 color); - - static void drawPlanetMapped(int x, int y, int size, Uint32 color); - - static void drawResidentShip(Coordinate& shipLocation, Coordinate& planetLocation, - int color); - - static void drawFlyingShip(Coordinate&, double direction, int color); - - static void drawSelection(Coordinate&); - - static void drawOrbit(Coordinate&, double rotationDistance, int color); - - static void drawBuildProgress(Coordinate&, int, double); - - static void drawText(int, int, const char *, int, int, int, int a=255); - - static int getFontHeight(); - - static void drawBox(int x, int y, int w, int h, int r, int g, int b); - - static void drawRadar(); - - static void drawSun(); - - static void drawStar(int x, int y, int brightness); - - static void drawSonar(Coordinate coord, int size, double percentage, int r, int g, int b, bool circle); - - static void drawPlayerStat(int size, int index, int previousValue, int currentValue, int r, int g, int b); - - static void drawMouseSelection(Coordinate &c1, Coordinate &c2); - - static void drawCursor(int, int); - - static void updateScreen(); - - static void glEnable2d(); - - static void glDisable2d(); - - static void initScreen(); - - static void shutdown(); - - static gcn::OpenGLGraphics *getOpenGLGraphics(); - - private: - - static gcn::OpenGLGraphics *openglGraphics; - - static SDL_Surface* main; - - static SDL_Surface* opengl; - - static Font *font; - -}; - -#endif /* CANVAS_H */ Copied: branches/qonk-opengl-simple/src/canvas.h (from rev 130, branches/qonk-opengl/src/canvas.h) =================================================================== --- branches/qonk-opengl-simple/src/canvas.h (rev 0) +++ branches/qonk-opengl-simple/src/canvas.h 2007-10-12 08:50:05 UTC (rev 132) @@ -0,0 +1,89 @@ +// Copyright 2007 by Robert Schuster <rob...@fs...> + +// Basic drawing and converting operations for Qonk + +// If not explicitly told otherwise coordinate values are +// in game units. + +#ifndef CANVAS_H +#define CANVAS_H + +#include <SDL/SDL.h> + +#include "guichan/guichan/sdl.hpp" +#include "guichan/guichan/opengl.hpp" + +class Coordinate; +class Font; + +class Canvas +{ + public: + static void alphaBlend( SDL_Surface* surface, Uint8 alpha ); + + static void drawSelector( Coordinate&, Sint16 offset, + Sint16 width, Sint16 height, + Uint8 R, Uint8 G, Uint8 B ); + + static void drawNearestPlanetSelector(Coordinate&, int); + + static void drawPlanet(Coordinate&, int size, Uint32 color); + + static void drawPlanetMapped(int x, int y, int size, Uint32 color); + + static void drawResidentShip(Coordinate& shipLocation, Coordinate& planetLocation, + int color); + + static void drawFlyingShip(Coordinate&, double direction, int color); + + static void drawSelection(Coordinate&); + + static void drawOrbit(Coordinate&, double rotationDistance, int color); + + static void drawBuildProgress(Coordinate&, int, double); + + static void drawText(int, int, const char *, int, int, int, int a=255); + + static int getFontHeight(); + + static void drawBox(int x, int y, int w, int h, int r, int g, int b); + + static void drawRadar(); + + static void drawSun(); + + static void drawStar(int x, int y, float brightness); + + static void drawSonar(Coordinate coord, int size, double percentage, int r, int g, int b, bool circle); + + static void drawPlayerStat(int size, int index, int previousValue, int currentValue, int r, int g, int b); + + static void drawMouseSelection(Coordinate &c1, Coordinate &c2); + + static void drawCursor(int, int); + + static void updateScreen(); + + static void glEnable2d(); + + static void glDisable2d(); + + static void initScreen(); + + static void shutdown(); + + static gcn::OpenGLGraphics *getOpenGLGraphics(); + + private: + + static gcn::OpenGLGraphics *openglGraphics; + + static SDL_Surface* main; + + static SDL_Surface* opengl; + + static Font *font; + +}; + +#endif /* CANVAS_H */ Deleted: branches/qonk-opengl-simple/src/game.cpp =================================================================== --- branches/qonk-opengl/src/game.cpp 2007-10-09 08:31:27 UTC (rev 129) +++ branches/qonk-opengl-simple/src/game.cpp 2007-10-12 08:50:05 UTC (rev 132) @@ -1,377 +0,0 @@ -#include "game.h" -#include "gameoptions.h" - -#include "timer.h" -#include "planets.h" -#include "players.h" -#include "universe.h" -#include "messages.h" -#include "timer.h" -#include "settings.h" -#include "canvas.h" -#include "selection.h" - -#include "extensions.h" - -using namespace std; - -Game::Game(GameOptions &go) - : gameOptions(go), nextNumberOfPlanets(0), nextNumberOfComputerPlayers(0), timer(new Timer()), - players(0), universe(0), messages(0), selection(0) -{ - int numberOfPlanets = gameOptions.getPlanets(); - int numberOfComputerPlayers = gameOptions.getPlayers(); - - state = PLAYING; - quit = false; - timer->start(); - - // Initialize selection - x = Settings::getScreenWidth()/2; - y = Settings::getScreenHeight()/2; - xp = xn = yp = yn = 0; - - universe = new Universe( numberOfPlanets ); - - players = new Players( universe ); - universe->actionQueue->scheduleAction( 1000, new UpdatePlayersStatsAction( players) ); - - humanPlayer = new HumanPlayer( universe, 0xffffff, 1); - humanPlayer->setVisible(true); - universe->claim(0, humanPlayer, 1, 3); - players->push_back(humanPlayer); - - bool vis = gameOptions.getEnemyVisibility(); - - int hueCounter = rand() % 360; - for (int i=0;i<numberOfComputerPlayers;i++) - { - Player *newPlayer = new ComputerPlayer( universe, HSVtoRGB( hueCounter, 0.9, 0.9 ), 2); - newPlayer->setVisible(vis); - universe->claim(0, newPlayer, 1, 3); - hueCounter = ( hueCounter + 360 / numberOfComputerPlayers ) % 360; - players->push_back(newPlayer); - } - - NeutralPlayer *neutral = new NeutralPlayer(universe, 0x808080); - neutral->setVisible(vis); - universe->claimRemaining(0, neutral, 3, 2); - players->push_back(neutral); - - messages = new Messages(); - selection = new Selection(); -} - -Game::~Game() -{ - delete players; - delete universe; - delete messages; - delete selection; - delete timer; -} - -bool -Game::run(bool menuVisible) -{ - if (quit) - return false; - - // TODO: Find a way to live without the next line. - setPaused(menuVisible); - - if (timer->isPaused()) - return true; - - moveCursor(xp - xn, yp - yn); - - Uint32 time = getTime(); - // update the universe - universe->update(time); - - // let players update their states - players->update(this); - - if( state == PLAYING ) - { - if(checkLost()) { - setEnemyVisibility(true); - state = LOST; - MSGlost(this); - } - - if( checkWin()) { - nextNumberOfPlanets = gameOptions.getPlanets() + 1; - nextNumberOfComputerPlayers = gameOptions.getPlayers() + 1; - - if( nextNumberOfPlanets == 11 ) - { - int d = nextNumberOfPlanets - nextNumberOfComputerPlayers; - if( d != 1 ) - nextNumberOfPlanets = 10; - } - - MSGwon(this, nextNumberOfPlanets, nextNumberOfComputerPlayers); - state = WON; - } - } - - return true; -} - -void -Game::handle(GameAction gameAction, int value) -{ - if (timer->isPaused()) - return; - - switch (gameAction) - { - case GA_NEXT_ROUND: - if (!value) return; - if(state==WON) - { - quit = true; - } - gameOptions.setPlanets(nextNumberOfPlanets); - gameOptions.setPlayers(nextNumberOfComputerPlayers); - - break; - case GA_RESTART_ROUND: - if (!value) return; - quit = true; - break; - case GA_SELECT_ALL: - if (value) - selectAllPlanets(); - break; - case GA_TOGGLE_ENEMY_VISIBILITY: - if (value) - { - gameOptions.setEnemyVisibility(!gameOptions.getEnemyVisibility()); - setEnemyVisibility(gameOptions.getEnemyVisibility()); - } - break; - case GA_SELECTION: - if (value) - startSelection(x, y); - else - endSelection(x, y); - break; - case GA_SELECT_NEAREST_PLANET: - if (value) - selectNearestPlanet(x, y); - break; - case GA_MOVE_TO_NEAREST_PLANET: - if (value) - moveToNearestPlanet(x, y); - break; - case GA_FLEET_STRENGTH_UP: - if (value) - fleetStrengthUp(); - break; - case GA_FLEET_STRENGTH_DOWN: - if (value) - fleetStrengthDown(); - break; - case GA_SET_FLEET_STRENGTH_SINGLE: - if (value) - setFleetStrength(1); - break; - case GA_CURSOR_UP: - yn = value; - break; - case GA_CURSOR_DOWN: - yp = value; - break; - case GA_CURSOR_LEFT: - xn = value; - break; - case GA_CURSOR_RIGHT: - xp = value; - break; - default: - if (value - && gameAction >= GA_SET_FLEET_STRENGTH_10 - && gameAction <= GA_SET_FLEET_STRENGTH_100) - { - setFleetStrength(10 * (1 + gameAction - GA_SET_FLEET_STRENGTH_10)); - } - } -} - -void -Game::moveCursor(int xrel, int yrel) -{ - x += xrel; - y += yrel; - - x = max(0, min(x, Settings::getScreenWidth())); - y = max(0, min(y, Settings::getScreenHeight())); - - if (selection->isSelecting()) - selection->update(x, y); - else - universe->highlightNearestPlanet(x, y); -} - -bool -Game::checkWin() -{ - bool allPlayersDead = true; - for( Players::iterator i = players->begin(); i != players->end(); i++ ) { - if( (*i)->getTeam() == 2 ) - - if( ((ComputerPlayer*)(*i))->getPoints() > 0 ) - allPlayersDead = false; - } - - return allPlayersDead; -} - -bool -Game::checkLost() -{ - return humanPlayer->getPoints() == 0; -} - -void -Game::fleetStrengthUp() -{ - int str = humanPlayer->getFleetStrength(); - if (str == 1) - str = 10; - else if (str == 100) - str = 1; - else - str += 10; - - setFleetStrength(str); -} - -void -Game::fleetStrengthDown() -{ - int str = humanPlayer->getFleetStrength(); - if (str == 1) - str = 100; - else if (str == 10) - str = 1; - else - str -= 10; - - setFleetStrength(str); -} - -void -Game::setFleetStrength(int str) -{ - humanPlayer->setFleetStrength(str); - - stringstream s; - if (str == 1) - s << "Single ship mode"; - else - { - s << "Fleet strength " << str << "%"; - } - - messages->setFleetStrengthMessage( Message(getTime(), s.str(), 0x808080) ); -} - -void -Game::setPaused(bool p) -{ - if (p ^ timer->isPaused()) - timer->pause(); - -} - -void -Game::setEnemyVisibility(bool visible) -{ - int humanTeam = humanPlayer->getTeam(); - - for( Players::iterator i = players->begin(); i != players->end(); i++ ) - { - Player *p = *i; - if (p->getTeam() != humanTeam) - p->setVisible(visible); - } - - stringstream s; - s << "Made enemies " << (visible ? "visible" : "invisible"); - - messages->addMessage(timer->getTime(), Message(getTime(), s.str(), 20000, 0x808080)); -} - -void -Game::selectAllPlanets() -{ - humanPlayer->selectAllPlanets(); -} - -void -Game::selectNearestPlanet(int x, int y) -{ - humanPlayer->selectNearestPlanet(x, y); -} - -void -Game::moveToNearestPlanet(int x, int y) -{ - humanPlayer->moveToNearestPlanet(getTime(), x, y); -} - -void -Game::startSelection(int x, int y) -{ - selection->start(x, y); -} - -void -Game::updateSelection(int x, int y) -{ - selection->update(x, y); -} - -void -Game::endSelection(int x, int y) -{ - selection->end(); - - if (selection->isEmpty()) - humanPlayer->selectPlanetAt(x, y); - else - universe->planets->sourceSelect(selection, humanPlayer); -} - -void -Game::addMessage(int offset, Message msg) -{ - messages->addMessage( timer->getTime() + offset, msg); -} - -Uint32 -Game::getTime() const -{ - return timer->getTime(); -} - -void -Game::render() -{ - Uint32 time = getTime(); - - universe->renderBackground(time); - players->render(); - - humanPlayer->render(); - selection->render(); - - universe->renderForeground(time); - - messages->render(time); - - Canvas::drawCursor(x, y); -} Copied: branches/qonk-opengl-simple/src/game.cpp (from rev 130, branches/qonk-opengl/src/game.cpp) =================================================================== --- branches/qonk-opengl-simple/src/game.cpp (rev 0) +++ branches/qonk-opengl-simple/src/game.cpp 2007-10-12 08:50:05 UTC (rev 132) @@ -0,0 +1,379 @@ +#include "game.h" +#include "gameoptions.h" + +#include "timer.h" +#include "planets.h" +#include "players.h" +#include "universe.h" +#include "messages.h" +#include "timer.h" +#include "settings.h" +#include "canvas.h" +#include "selection.h" + +#include "extensions.h" + +using namespace std; + +Game::Game(GameOptions &go) + : gameOptions(go), nextNumberOfPlanets(0), nextNumberOfComputerPlayers(0), timer(new Timer()), + players(0), universe(0), messages(0), selection(0) +{ + int numberOfPlanets = gameOptions.getPlanets(); + int numberOfComputerPlayers = gameOptions.getPlayers(); + + state = PLAYING; + quit = false; + timer->start(); + + // Initialize selection + x = Settings::getScreenWidth()/2; + y = Settings::getScreenHeight()/2; + xp = xn = yp = yn = 0; + + universe = new Universe( numberOfPlanets ); + + players = new Players( universe ); + universe->actionQueue->scheduleAction( 1000, new UpdatePlayersStatsAction( players) ); + + humanPlayer = new HumanPlayer( universe, 0xffffff, 1); + humanPlayer->setVisible(true); + universe->claim(0, humanPlayer, 1, 3); + players->push_back(humanPlayer); + + bool vis = gameOptions.getEnemyVisibility(); + + int hueCounter = rand() % 360; + for (int i=0;i<numberOfComputerPlayers;i++) + { + Player *newPlayer = new ComputerPlayer( universe, HSVtoRGB( hueCounter, 0.9, 0.9 ), 2); + newPlayer->setVisible(vis); + universe->claim(0, newPlayer, 1, 3); + hueCounter = ( hueCounter + 360 / numberOfComputerPlayers ) % 360; + players->push_back(newPlayer); + } + + NeutralPlayer *neutral = new NeutralPlayer(universe, 0x808080); + neutral->setVisible(vis); + universe->claimRemaining(0, neutral, 3, 2); + players->push_back(neutral); + + messages = new Messages(); + selection = new Selection(); +} + +Game::~Game() +{ + delete players; + delete universe; + delete messages; + delete selection; + delete timer; +} + +bool +Game::run(bool menuVisible) +{ + if (quit) + return false; + + // TODO: Find a way to live without the next line. + setPaused(menuVisible); + + if (timer->isPaused()) + return true; + + moveCursor(xp - xn, yp - yn); + + Uint32 time = getTime(); + // update the universe + universe->update(time); + + // let players update their states + players->update(this); + + if( state == PLAYING ) + { + if(checkLost()) { + setEnemyVisibility(true); + state = LOST; + MSGlost(this); + } + + if( checkWin()) { + nextNumberOfPlanets = gameOptions.getPlanets() + 1; + nextNumberOfComputerPlayers = gameOptions.getPlayers() + 1; + + if( nextNumberOfPlanets == 11 ) + { + int d = nextNumberOfPlanets - nextNumberOfComputerPlayers; + if( d != 1 ) + nextNumberOfPlanets = 10; + } + + MSGwon(this, nextNumberOfPlanets, nextNumberOfComputerPlayers); + state = WON; + } + } + + return true; +} + +void +Game::handle(GameAction gameAction, int value) +{ + if (timer->isPaused()) + return; + + switch (gameAction) + { + case GA_NEXT_ROUND: + if (!value) return; + if(state==WON) + { + quit = true; + } + gameOptions.setPlanets(nextNumberOfPlanets); + gameOptions.setPlayers(nextNumberOfComputerPlayers); + + break; + case GA_RESTART_ROUND: + if (!value) return; + quit = true; + break; + case GA_SELECT_ALL: + if (value) + selectAllPlanets(); + break; + case GA_TOGGLE_ENEMY_VISIBILITY: + if (value) + { + gameOptions.setEnemyVisibility(!gameOptions.getEnemyVisibility()); + setEnemyVisibility(gameOptions.getEnemyVisibility()); + } + break; + case GA_SELECTION: + if (value) + startSelection(x, y); + else + endSelection(x, y); + break; + case GA_SELECT_NEAREST_PLANET: + if (value) + selectNearestPlanet(x, y); + break; + case GA_MOVE_TO_NEAREST_PLANET: + if (value) + moveToNearestPlanet(x, y); + break; + case GA_FLEET_STRENGTH_UP: + if (value) + fleetStrengthUp(); + break; + case GA_FLEET_STRENGTH_DOWN: + if (value) + fleetStrengthDown(); + break; + case GA_SET_FLEET_STRENGTH_SINGLE: + if (value) + setFleetStrength(1); + break; + case GA_CURSOR_UP: + yn = value; + break; + case GA_CURSOR_DOWN: + yp = value; + break; + case GA_CURSOR_LEFT: + xn = value; + break; + case GA_CURSOR_RIGHT: + xp = value; + break; + default: + if (value + && gameAction >= GA_SET_FLEET_STRENGTH_10 + && gameAction <= GA_SET_FLEET_STRENGTH_100) + { + setFleetStrength(10 * (1 + gameAction - GA_SET_FLEET_STRENGTH_10)); + } + } +} + +void +Game::moveCursor(int xrel, int yrel) +{ + x += xrel; + y += yrel; + + x = max(0, min(x, Settings::getScreenWidth())); + y = max(0, min(y, Settings::getScreenHeight())); + + if (selection->isSelecting()) + selection->update(x, y); + else + universe->highlightNearestPlanet(x, y); +} + +bool +Game::checkWin() +{ + bool allPlayersDead = true; + for( Players::iterator i = players->begin(); i != players->end(); i++ ) { + if( (*i)->getTeam() == 2 ) + + if( ((ComputerPlayer*)(*i))->getPoints() > 0 ) + allPlayersDead = false; + } + + return allPlayersDead; +} + +bool +Game::checkLost() +{ + return humanPlayer->getPoints() == 0; +} + +void +Game::fleetStrengthUp() +{ + int str = humanPlayer->getFleetStrength(); + if (str == 1) + str = 10; + else if (str == 100) + str = 1; + else + str += 10; + + setFleetStrength(str); +} + +void +Game::fleetStrengthDown() +{ + int str = humanPlayer->getFleetStrength(); + if (str == 1) + str = 100; + else if (str == 10) + str = 1; + else + str -= 10; + + setFleetStrength(str); +} + +void +Game::setFleetStrength(int str) +{ + humanPlayer->setFleetStrength(str); + + stringstream s; + if (str == 1) + s << "Single ship mode"; + else + { + s << "Fleet strength " << str << "%"; + } + + messages->setFleetStrengthMessage( Message(getTime(), s.str(), 0x808080) ); +} + +void +Game::setPaused(bool p) +{ + if (p ^ timer->isPaused()) + timer->pause(); + +} + +void +Game::setEnemyVisibility(bool visible) +{ + int humanTeam = humanPlayer->getTeam(); + + for( Players::iterator i = players->begin(); i != players->end(); i++ ) + { + Player *p = *i; + if (p->getTeam() != humanTeam) + p->setVisible(visible); + } + + stringstream s; + s << "Made enemies " << (visible ? "visible" : "invisible"); + + messages->addMessage(timer->getTime(), Message(getTime(), s.str(), 20000, 0x808080)); +} + +void +Game::selectAllPlanets() +{ + humanPlayer->selectAllPlanets(); +} + +void +Game::selectNearestPlanet(int x, int y) +{ + humanPlayer->selectNearestPlanet(x, y); +} + +void +Game::moveToNearestPlanet(int x, int y) +{ + humanPlayer->moveToNearestPlanet(getTime(), x, y); +} + +void +Game::startSelection(int x, int y) +{ + selection->start(x, y); +} + +void +Game::updateSelection(int x, int y) +{ + selection->update(x, y); +} + +void +Game::endSelection(int x, int y) +{ + selection->end(); + + if (selection->isEmpty()) + humanPlayer->selectPlanetAt(x, y); + else + universe->planets->sourceSelect(selection, humanPlayer); +} + +void +Game::addMessage(int offset, Message msg) +{ + messages->addMessage( timer->getTime() + offset, msg); +} + +Uint32 +Game::getTime() const +{ + return timer->getTime(); +} + +void +Game::render() +{ + Uint32 time = getTime(); + + + messages->render(time); + + universe->renderBackground(time); + players->render(); + + humanPlayer->render(); + + universe->renderForeground(time); + + selection->render(); + + Canvas::drawCursor(x, y); +} Deleted: branches/qonk-opengl-simple/src/main.cpp =================================================================== --- branches/qonk-opengl/src/main.cpp 2007-10-09 08:31:27 UTC (rev 129) +++ branches/qonk-opengl-simple/src/main.cpp 2007-10-12 08:50:05 UTC (rev 132) @@ -1,288 +0,0 @@ -// Copyright 2005 by Anthony Liekens an...@li... - -#ifdef HAVE_CONFIG_H -# include "config.h" -#else -#define VERSION no-version -#endif - -#include <sstream> -#include <string> - -#include "sdl_driver.h" -#include "settings.h" - -#include "canvas.h" - -#include "game.h" -#include "main.h" - -#include "menumanager.h" -#include "videooptions.h" -#include "gameoptions.h" - - -using namespace std; - -Main::Main() - : game(0), running(true), lastTicks(0), fpsCounter(0), fps(0) -{ - driver = new SDLDriver(*this); - menuManager = new MenuManager(*this); -} - -Main::~Main() -{ - delete menuManager; - delete driver; -} - -void -Main::startSinglePlayerGame(int planets, int players) -{ - GameOptions &gameOptions = menuManager->getGameOptions(); - - if( planets <= 1 ) - { - cerr << "Resetting to least of 2 planets" << endl; - planets = 2; - } - - if( players > planets - 1 ) - { - cerr << "Resetting computer players to maximum of " << planets - 1 << endl; - players = planets - 1; - } - - if( players < 1 ) - { - cerr << "Resetting computer players to at least 1" << endl; - players = 1; - } - - gameOptions.setPlanets(planets); - gameOptions.setPlayers(players); - - startSinglePlayerGame(gameOptions); -} - -void -Main::startSinglePlayerGame(GameOptions &gameOptions) -{ - if (game) - { - delete game; - game = 0; - } - - menuManager->hide(); - - game = new Game(gameOptions); - game->setPaused(false); -} - -void -Main::quit() -{ - running = false; -} - -void -Main::showMenu() -{ - if (menuManager->isVisible()) - return; - - menuManager->show(); - - // Just in case there is a game, pause it. - if (game) - game->setPaused(true); - -} - -void -Main::applyVideoOptions(VideoOptions &videoOptions) -{ - // Causes the game to pause which is nice when the CRT/TFT is resyncing. - showMenu(); - - Settings::setFullscreen(videoOptions.getFullscreen()); - Settings::setScreenSize(videoOptions.getScreenWidth(), videoOptions.getScreenHeight()); - - Canvas::initScreen(); - - menuManager->resize(); -} - -void -Main::handle(GameAction gameAction, int value) -{ - switch (gameAction) - { - case GA_SENSE_CANCEL: - if (!value) - menuManager->senseFinished(false); - break; - case GA_SENSE_COMPLETE: - if (!value) - menuManager->senseFinished(true); - break; - case GA_TOGGLE_FULLSCREEN: - if (value) return; - { - VideoOptions &vo = menuManager->getVideoOptions(); - vo.toggleFullscreen(); - applyVideoOptions(vo); - } - break; - case GA_LEAVE: - // It is important to act on keyrelease since this is the same - // for what guichan reacts. By doing so it is predictable that - // after handling GA_LEAVE (which may make the menusystem visible) - // guichan's logic is called. - if (value) - return; - - // Main does not care about making the menu system invisible. This is done - // from inside the menu system. - if (!menuManager->isVisible()) - menuManager->show(); - - break; - case GA_SCREENSHOT: - if (value) - return; - - SDL_SaveBMP( SDL_GetVideoSurface(), "screenshot.bmp" ); - break; - default: - // Let the game instance handle the rest - if (game) - game->handle(gameAction, value); - break; - } -} - -void -Main::renderFPS() -{ - stringstream s; - - fpsCounter++; - - s << fps; - - Canvas::drawText( Settings::getScreenWidth() - 50, Settings::getScreenHeight() - 50, s.str().c_str(), 0x80, 0x80, 0x80 ); - - if( SDL_GetTicks() - lastTicks >= 1000 ) { - lastTicks = SDL_GetTicks(); - fps = fpsCounter; - fpsCounter = 0; - } - -} - -void -Main::run() -{ - bool b; - - // Main loop: loop forever. - while (running) { - //Canvas::drawBo... [truncated message content] |