p4objects.h #5

  • //
  • guest/
  • sam_stafford/
  • p4hl/
  • src/
  • dlls/
  • p4objects.h
  • View
  • Commits
  • Open Download .zip Download (4 KB)
#if !defined P4OBJECTS_H
#define P4OBJECTS_H

#include "extdll.h" 
#include "decals.h" 

#ifndef UTIL_H
#include "util.h"
#endif

#ifndef MAX_PATH_SIZE
#include "cbase.h" 
#endif

#include "monsters.h" 
#include "weapons.h" 
#include "nodes.h" 
#include "player.h" 
#include "soundent.h" 
#include "shake.h" 
#include "gamerules.h"
#include "strbuf.h"

#include "clientdepotuser.h"
#include "clientapi.h"
#include "ClientDirUser.h"
#include "ClientFileUser.h"
#include "clientluser.h"
#include "FileLogCache.h"
#include "ObjectRev.h"

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#define MAXRESULTS 300
/*********
 * MAXRESULTS here is unrelated to Perforce's MaxResults setting, although it's a similar concept.
 * It defines the total number of objects that any given "expansion" procedure may create.  Past
 * a certain number of objects, Half-Life begins to complain about too many visible entities; in
 * theory a Half-Life server may contain 800 entities, but displaying them all at once is difficult.
 **********/

class CObjectDepot : public CBaseEntity
{ 
	public: 

	void Spawn( ); //Things to do when this object is created.
	void Precache( ); //Models to precache before loading this object into the world.
	void EXPORT Think(); //Called at regular intervals by the engine.
	void EXPORT Touch( CBaseEntity* ); //Called when something touches this object.

	void Long (CBasePlayer*); //The special "green beam" method.
	void Expand (CBasePlayer*); //The special "red beam" method.

	void newLevel(short); //Makes this object rise or descend to a new "level" of expansion.
	void disown(CBaseEntity*); //Remove references to this child object.
	void killKids(CBaseEntity*); //Delete all child objects except this one.

	StrBuf path; //The depot name, ie "depot"
	CBaseEntity* parent; //The parent; this will be a CObjectInfo.
	short level; //The current "level" or altitude.  A level of 1 indicates a currently expanded node.
	ListList dirs; //If expanded, this contains references to all the CObjectDir children.
	ListList files; //Same as above, but references to CObjectFile children.

	int xcoord, ycoord;
	ClientDirUser dui;
	ClientFileUser fui;
};

//Most of the P4 objects' methods have similar functions, so I'll omit further description of them except
//where needed.

class CObjectDir : public CBaseEntity  
{
public:
	CObjectDir();
	void Spawn( );
	void Precache( );
	void Think ( );
	void Touch (CBaseEntity* );
	void Long (CBasePlayer*);
	void Expand (CBasePlayer*);
	void newLevel (short);
	void disown (CBaseEntity*);
	void killKids (CBaseEntity*);

	short level;
	CBaseEntity* parent; //The parent of a CObjectDir will be a CObjectDepot or a CObjectDir.
	StrBuf path; //The path is in the form "//depot/main/dir".
	ListList dirs;
	ListList files;

	int xcoord, ycoord;
	ClientDirUser dui;
	ClientFileUser fui;
};

#define FTYPE_TEX 1
#define FTYPE_BIN 2
#define FTYPE_APP 3
#define FTYPE_SYM 4

class CObjectFile : public CBaseEntity  
{
public:
	void Spawn ( );
	void Precache ( );
	CObjectFile();
	void Think ( );

	FileLogCache* cache;
	FileHead* hwork;
	FileRev* rwork;
	bool intonotfrom;
	short revsmade;
	int ycoord;
	float zcoord;
	bool alldone;

	void Touch(CBaseEntity*);
	void Long (CBasePlayer*);
	void Expand (CBasePlayer*);
	void newLevel (short);
	void disown(CBaseEntity *);
	void killKids(CBaseEntity *);

	CBaseEntity* parent;
	StrBuf path; //The path is in the form "//depot/main/dir/file".
	short level;
	short ftype;

	ListList revs; //This is a list of CObjectRev objects, if this file is expanded.

};

extern StrBuf P4PORT;

//The CObjectInfo is a CBaseAnimating to allow it to spin.  The other objects could be made
//to spin as well, since their models include spinning animations - I chose not to make this
//be the case, but it'd only require a few extra lines of code to make it happen.

class CObjectInfo : public CBaseAnimating 
{ 
	public: 
	short int level;

	void Spawn( ); 
	void Precache( );
    void EXPORT Think();
	void EXPORT Touch( CBaseEntity* );
	void Expand( CBasePlayer* );
	void newLevel (short);
	void disown (CBaseEntity*);
	void killKids( CBaseEntity *Caller );

	float nextRefreshTime; //use this to govern "refreshes" with the server

	ListList depots;
};

#endif
# Change User Description Committed
#6 1689 Sam Stafford Integrate 02.1 API and code cleanup to P4HL.
 Lots of work.  Phew.
#5 1024 Sam Stafford Reworked entity creation in most cases - it's done one at a time now rather
than all at once.  This allows us to have more entities than the previous limit
of 130, and also looks a little nicer.

Folders and files now pop into existence instantly instead of sliding - makes
navigation easier.  Depots still slide because there typically aren't as many
of them (okay, I might eventually make them pop too, but I'm tired now).
Revisions slide because it looks really cool - like a waterfall pouring out of
the file.

The upper limit to entities is now due to the "visible entity packet" thing,
which I'm certain I have no control over - it's as high as it can possibly be
right now.
#4 1007 Sam Stafford A stab at making P4HL a bit more accessible to Perforce novices.
During the Precache() phase of the P4HL objects, a "p4 info" is
executed.  If this returns any errors, odds are there's no server
there (I can't think of what other error "p4 info" would return).
If this happens, use "public.perforce.com:1666" as the new port
value for all future Perforce transactions during this session,
and send a message to the console explaining this.
#3 1003 Sam Stafford Different file types now displayed differently.
 Also flipped
around the file model so that its text doesn't look backwards
any more.
#2 971 Sam Stafford Have the ObjectInfo run a "p4 info" every 30 seconds.
#1 937 Sam Stafford Renaming my guest directory to the more conventional
sam_stafford.
//guest/samwise/p4hl/src/dlls/p4objects.h
#1 936 Sam Stafford Adding P4HL to the public depot.
 See relnotes.txt for
installation instructions; all relevant files are under
p4hl/dist.

Source code is under p4hl/src in the form of a VC++ project.