| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 |
- #pragma once
- //========================================================================
- // types.h : Defines some basic types, replacing the need for atltypes.h
- // or project specific include files that are used frequently, but
- // are changed infrequently
- //
- // GameCode4 is the sample application that encapsulates much of the source code
- // discussed in "Game Coding Complete - 4th Edition" by Mike McShaffry and David
- // "Rez" Graham, published by Charles River Media.
- // ISBN-10: 1133776574 | ISBN-13: 978-1133776574
- //
- // If this source code has found it's way to you, and you think it has helped you
- // in any way, do the authors a favor and buy a new copy of the book - there are
- // detailed explanations in it that compliment this code well. Buy a copy at Amazon.com
- // by clicking here:
- // http://www.amazon.com/gp/product/1133776574/ref=olp_product_details?ie=UTF8&me=&seller=
- //
- // There's a companion web site at http://www.mcshaffry.com/GameCode/
- //
- // The source code is managed and maintained through Google Code:
- // http://code.google.com/p/gamecode4/
- //
- // (c) Copyright 2012 Michael L. McShaffry and David Graham
- //
- // This program is free software; you can redistribute it and/or
- // modify it under the terms of the GNU Lesser GPL v3
- // as published by the Free Software Foundation.
- //
- // 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
- // http://www.gnu.org/licenses/lgpl-3.0.txt for more details.
- //
- // You should have received a copy of the GNU Lesser GPL v3
- // along with this program; if not, write to the Free Software
- // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- //
- //========================================================================
- #include <math.h>
- //---------------------------------------------------------------------------------------------------------------------
- // This class represents a single point in 2D space
- //---------------------------------------------------------------------------------------------------------------------
- class Point
- {
- public:
- long x, y;
- // construction
- Point(void) { x = y = 0; }
- Point(const long newX, const long newY) { x = newX; y = newY; }
- Point(const Point& newPoint) { x = newPoint.x; y = newPoint.y; }
- Point(const Point* pNewPoint) { x = pNewPoint->x; y = pNewPoint->y; }
- // assignment
- Point& operator=(const Point& newPoint) { x = newPoint.x; y = newPoint.y; return (*this); }
- Point& operator=(const Point* newPoint) { x = newPoint->x; y = newPoint->y; return (*this); }
- // addition/subtraction
- Point& operator+=(const Point& newPoint) { x += newPoint.x; y += newPoint.y; return (*this); }
- Point& operator-=(const Point& newPoint) { x -= newPoint.x; y -= newPoint.y; return (*this); }
- Point& operator+=(const Point* newPoint) { x += newPoint->x; y += newPoint->y; return (*this); }
- Point& operator-=(const Point* newPoint) { x -= newPoint->x; y -= newPoint->y; return (*this); }
- Point& operator+(const Point& other) { Point temp(this); temp += other; temp += other; return (*this); }
- Point& operator-(const Point& other) { Point temp(this); temp -= other; temp -= other; return (*this); }
- // comparison
- bool operator==(const Point& other) const { return ((x == other.x) && (y == other.y)); }
- bool operator!=(const Point& other) const { return ((x != other.x) || (y != other.y)); }
- // accessors (needed for Lua)
- long GetX() const { return x; }
- long GetY() const { return y; }
- void SetX(const long newX) { x = newX; }
- void SetY(const long newY) { y = newY; }
- void Set(const long newX, const long newY) { x = newX; y = newY; }
- float Length() const { return sqrt((float)(x*x+y*y)); }
- };
- inline Point operator-(const Point& left, const Point& right) { Point temp(left); temp -= right; return temp; }
|