open_toontown_panda3d/direct/src/plugin/p3dMainObject.h

94 lines
3.1 KiB
C++

// Filename: p3dMainObject.h
// Created by: drose (10Jul09)
//
////////////////////////////////////////////////////////////////////
//
// PANDA 3D SOFTWARE
// Copyright (c) Carnegie Mellon University. All rights reserved.
//
// All use of this software is subject to the terms of the revised BSD
// license. You should have received a copy of this license along
// with this source code in a file named "LICENSE."
//
////////////////////////////////////////////////////////////////////
#ifndef P3DMAINOBJECT_H
#define P3DMAINOBJECT_H
#include "p3d_plugin_common.h"
#include "p3dObject.h"
#include <map>
class P3DSession;
class P3DInstance;
////////////////////////////////////////////////////////////////////
// Class : P3DMainObject
// Description : This corresponds to the "main" object exposed by a
// particular instance, as returned by
// P3DInstance::get_panda_script_object(). This object
// corresponds to the appRunner.main object in Python,
// and the document.pluginobject.main object in
// JavaScript.
//
// This is mostly a wrapper around a P3DPythonObject
// pointer, and therefore functions like any other
// P3DPythonObject; but it also handles the special case
// of being available before Python has been started;
// and it furthermore reports properties that are
// generated directly by the core API (like
// downloadProgress and such).
////////////////////////////////////////////////////////////////////
class P3DMainObject : public P3DObject {
public:
P3DMainObject();
virtual ~P3DMainObject();
public:
virtual P3D_object_type get_type();
virtual bool get_bool();
virtual int get_int();
virtual double get_float();
virtual void make_string(string &value);
virtual P3D_object *get_property(const string &property);
virtual bool set_property(const string &property, bool needs_response,
P3D_object *value);
virtual bool has_method(const string &method_name);
virtual P3D_object *call(const string &method_name, bool needs_response,
P3D_object *params[], int num_params);
virtual void output(ostream &out);
void set_pyobj(P3D_object *pyobj);
P3D_object *get_pyobj() const;
void set_instance(P3DInstance *inst);
private:
P3D_object *call_play(P3D_object *params[], int num_params);
P3D_object *call_read_game_log(P3D_object *params[], int num_params);
P3D_object *call_read_system_log(P3D_object *params[], int num_params);
P3D_object *read_log(const string &log_pathname,
P3D_object *params[], int num_params);
private:
P3D_object *_pyobj;
P3DInstance *_inst;
bool _unauth_play;
string _game_log_pathname;
// This map is used to store properties and retrieve until
// set_pyobj() is called for the firs ttime. At that point, the
// properties stored here are transferred down to the internal
// PyObject.
typedef map<string, P3D_object *> Properties;
Properties _properties;
};
#endif