mirror of
https://github.com/unknownworlds/NS.git
synced 2024-12-21 09:50:46 +00:00
91 lines
3.7 KiB
C
91 lines
3.7 KiB
C
|
//======== (C) Copyright 2002 Charles G. Cleveland All rights reserved. =========
|
||
|
//
|
||
|
// The copyright to the contents herein is the property of Charles G. Cleveland.
|
||
|
// The contents may be used and/or copied only with the written permission of
|
||
|
// Charles G. Cleveland, or in accordance with the terms and conditions stipulated in
|
||
|
// the agreement/contract under which the contents have been supplied.
|
||
|
//
|
||
|
// Purpose:
|
||
|
//
|
||
|
// $Workfile: AvHTechNodes.h $
|
||
|
// $Date: 2002/09/23 22:36:08 $
|
||
|
//
|
||
|
//-------------------------------------------------------------------------------
|
||
|
// $Log: AvHTechNodes.h,v $
|
||
|
// Revision 1.7 2002/09/23 22:36:08 Flayra
|
||
|
// - Slight refactoring
|
||
|
//
|
||
|
// Revision 1.6 2002/07/08 17:20:32 Flayra
|
||
|
// - Added hooks to support disallowing actions when a building is "busy"
|
||
|
//
|
||
|
//===============================================================================
|
||
|
#ifndef AVHTECHNODE_H
|
||
|
#define AVHTECHNODE_H
|
||
|
|
||
|
#include "types.h"
|
||
|
#include "mod/AvHMessage.h"
|
||
|
#include "mod/AvHTechID.h"
|
||
|
|
||
|
//NOTE (KGP): I've laid the groundwork for AvHTechNode to potentially become an abstract
|
||
|
// interface so that it can be subclassed separately for Client and Server instead of having
|
||
|
// #defines on the client side. The AvHMessageID is now a static field meant to uniquely
|
||
|
// identify the node within the tree; this greatly simplifies the AvHTechTree class. This
|
||
|
// has a side effect--assignment from another AvHTechNode doesn't change the AvHMessageID.
|
||
|
// When you want to create a copy of an AvHTechNode, use clone() instead of equality--this
|
||
|
// also eliminates the problem of slicing from the copy.
|
||
|
//
|
||
|
// The ability to subclass AvHTechNode also allows for a playtest configuration subclass
|
||
|
// that automatically self-updates when the relevant fields are updated; this is something
|
||
|
// I think is defintely worth doing for a couple days' work; it would completely replace
|
||
|
// the BalanceChangeListener functions of AvHTechTree below with a system that only changes
|
||
|
// components as necessary, which is much less CPU intensive.
|
||
|
|
||
|
class AvHTechNode
|
||
|
{
|
||
|
public:
|
||
|
AvHTechNode(const AvHMessageID inMessageID);
|
||
|
AvHTechNode(const AvHTechNode& other);
|
||
|
AvHTechNode(AvHMessageID inMessageID, AvHTechID inID, AvHTechID inPrereq1, AvHTechID inPrereq2, int inCost, int inBuildTime, bool inResearched = false);
|
||
|
virtual ~AvHTechNode(void);
|
||
|
|
||
|
virtual AvHTechNode* clone(void) const; //deleting this pointer is the responsibility of the caller.
|
||
|
virtual void swap(AvHTechNode& other); //assignment by swap - see Scott Meyers, Effective C++
|
||
|
AvHMessageID getMessageID(void) const;
|
||
|
AvHTechID getTechID(void) const;
|
||
|
void setTechID(const AvHTechID inMessageID);
|
||
|
AvHTechID getPrereqTechID1(void) const;
|
||
|
void setPrereqTechID1(const AvHTechID inMessageID);
|
||
|
AvHTechID getPrereqTechID2(void) const;
|
||
|
void setPrereqTechID2(const AvHTechID inMessageID);
|
||
|
int getCost(void) const;
|
||
|
void setCost(const int inCost);
|
||
|
int getBuildTime(void) const;
|
||
|
void setBuildTime(const int inBuildTime);
|
||
|
|
||
|
bool getIsResearchable(void) const;
|
||
|
bool getIsResearched(void) const;
|
||
|
bool getAllowMultiples(void) const;
|
||
|
void setAllowMultiples(const bool inAllow = true);
|
||
|
void setResearchable(bool inState = true);
|
||
|
void setResearchState(bool inState);
|
||
|
|
||
|
virtual bool operator==(const AvHTechNode& inTechNode) const;
|
||
|
bool operator!=(const AvHTechNode& inTechNode) const;
|
||
|
|
||
|
AvHTechNode& operator=(const AvHTechNode& inTechNode);
|
||
|
|
||
|
private:
|
||
|
// Adding a member? Change operator== and the copy contructor, too
|
||
|
const AvHMessageID mMessageID;
|
||
|
AvHTechID mTechID;
|
||
|
AvHTechID mPrereqID1;
|
||
|
AvHTechID mPrereqID2;
|
||
|
int mCost;
|
||
|
int mBuildTime;
|
||
|
|
||
|
bool mResearchable;
|
||
|
bool mResearched;
|
||
|
bool mAllowMultiples;
|
||
|
};
|
||
|
|
||
|
#endif
|