summaryrefslogtreecommitdiffhomepage
path: root/StarsEx/NetPlayer.h
blob: d79f2638f926ab7789c8bdd9f8c20cb3c4452bbc (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
/*  Starshatter: The Open Source Project
    Copyright (c) 2021-2024, Starshatter: The Open Source Project Contributors
    Copyright (c) 2011-2012, Starshatter OpenSource Distribution Contributors
    Copyright (c) 1997-2006, Destroyer Studios LLC.

    AUTHOR:       John DiCamillo


    OVERVIEW
    ========
    Network Player (Director) class
*/

#pragma once

#include <cstdint>

#include <List.h>
#include <Text.h>

#include "Geometry.h"
#include "Director.h"
#include "SimObject.h"

// +--------------------------------------------------------------------+

class Sim;
class Ship;
class NetMsg;
class NetObjLoc;
class NetObjHyper;
class NetObjTarget;
class NetObjEmcon;
class NetSysDamage;
class NetSysStatus;
class NetWepTrigger;
class NetWepRelease;
class NetWepDestroy;
class NetCommMsg;

// +--------------------------------------------------------------------+

class NetPlayer : public Director, public SimObserver
{
public:
    static const char* TYPENAME() { return "NetPlayer"; }

    NetPlayer(std::uint32_t nid) : netid(nid), objid(0), ship(0), iff(0) { }
    ~NetPlayer();

    int operator == (const NetPlayer& p) const { return netid == p.netid; }

    std::uint32_t        GetNetID()  const { return netid;   }
    std::uint32_t        GetObjID()  const { return objid;   }
    void                 SetObjID(std::uint32_t o) { objid = o;      }

    int                  GetIFF()    const { return iff;     }
    Ship*                GetShip()   const { return ship;    }
    void                 SetShip(Ship* s);

    const char*          Name()                     const { return name;    }
    void                 SetName(const char* n)           { name = n;       }
    const char*          SerialNumber()             const { return serno;   }
    void                 SetSerialNumber(const char* n)   { serno = n;      }

    virtual void         ExecFrame(double seconds);

    bool                 DoObjLoc(NetObjLoc*         obj_loc);
    bool                 DoObjHyper(NetObjHyper*     obj_hyper);
    bool                 DoObjTarget(NetObjTarget*   obj_target);
    bool                 DoObjEmcon(NetObjEmcon*     obj_emcon);
    bool                 DoWepTrigger(NetWepTrigger* trigger);
    bool                 DoWepRelease(NetWepRelease* release);
    bool                 DoCommMessage(NetCommMsg*   comm_msg);
    bool                 DoSysDamage(NetSysDamage*   sys_damage);
    bool                 DoSysStatus(NetSysStatus*   sys_status);

    virtual int          Type()      const { return 2;       }

    virtual bool         Update(SimObject* obj);
    virtual const char*  GetObserverName() const;

protected:
    std::uint32_t        netid;
    std::uint32_t        objid;
    Text                 name;
    Text                 serno;
    Ship*                ship;
    int                  iff;

    Point                loc_error;
    double               bleed_time;
};