mirror of
https://github.com/panda3d/panda3d.git
synced 2025-10-18 12:43:44 -04:00
more stuff
This commit is contained in:
parent
334fbe2653
commit
28eb9f3092
@ -10,6 +10,11 @@
|
|||||||
#include <modelPool.h>
|
#include <modelPool.h>
|
||||||
#include <ipc_thread.h>
|
#include <ipc_thread.h>
|
||||||
#include <transformTransition.h>
|
#include <transformTransition.h>
|
||||||
|
#include <lerp.h>
|
||||||
|
#include <guiFrame.h>
|
||||||
|
#include <guiButton.h>
|
||||||
|
#include <guiSign.h>
|
||||||
|
#include <clockObject.h>
|
||||||
|
|
||||||
#include <dconfig.h>
|
#include <dconfig.h>
|
||||||
|
|
||||||
@ -38,6 +43,17 @@ static bool doing_sync = false;
|
|||||||
static float my_time;
|
static float my_time;
|
||||||
|
|
||||||
enum TelemetryToken { T_End = 1, T_Pos, T_Vel, T_Num, T_Time, T_Sync };
|
enum TelemetryToken { T_End = 1, T_Pos, T_Vel, T_Num, T_Time, T_Sync };
|
||||||
|
enum PredictToken { P_Null, P_Linear };
|
||||||
|
enum CorrectToken { C_Pop, C_Lerp, C_Spline };
|
||||||
|
|
||||||
|
PT(AutonomousLerp) curr_lerp;
|
||||||
|
PredictToken curr_pred, pred_switch;
|
||||||
|
CorrectToken curr_corr, corr_switch;
|
||||||
|
PT(GuiButton) pnullButton;
|
||||||
|
PT(GuiButton) plinearButton;
|
||||||
|
PT(GuiButton) cpopButton;
|
||||||
|
PT(GuiButton) clerpButton;
|
||||||
|
PT(GuiButton) csplineButton;
|
||||||
|
|
||||||
static inline unsigned char* get_uint8(unsigned char* b, unsigned char& v) {
|
static inline unsigned char* get_uint8(unsigned char* b, unsigned char& v) {
|
||||||
v = b[0];
|
v = b[0];
|
||||||
@ -119,6 +135,7 @@ static void* internal_monitor(void*) {
|
|||||||
buff = get_float64(buff, x);
|
buff = get_float64(buff, x);
|
||||||
if (doing_sync) {
|
if (doing_sync) {
|
||||||
clock_skew = ClockObject::get_global_clock()->get_time() - x;
|
clock_skew = ClockObject::get_global_clock()->get_time() - x;
|
||||||
|
doing_sync = false;
|
||||||
cerr << "setting clock skew to: " << clock_skew << endl;
|
cerr << "setting clock skew to: " << clock_skew << endl;
|
||||||
} else
|
} else
|
||||||
my_time = x + clock_skew;
|
my_time = x + clock_skew;
|
||||||
@ -147,7 +164,42 @@ static void* internal_monitor(void*) {
|
|||||||
return (void*)0L;
|
return (void*)0L;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void deadrec_setup(void) {
|
static void predict_event(CPT_Event e) {
|
||||||
|
string s = e->get_name();
|
||||||
|
s = s.substr(0, s.find("-down"));
|
||||||
|
}
|
||||||
|
|
||||||
|
static void correct_event(CPT_Event e) {
|
||||||
|
string s = e->get_name();
|
||||||
|
s = s.substr(0, s.find("-down"));
|
||||||
|
}
|
||||||
|
|
||||||
|
typedef void event_func(CPT_Event);
|
||||||
|
|
||||||
|
static inline GuiButton* make_button(const string& name, Node* font,
|
||||||
|
EventHandler& eh, event_func func) {
|
||||||
|
GuiLabel* l1 = GuiLabel::make_simple_text_label(name, font);
|
||||||
|
GuiLabel* l2 = GuiLabel::make_simple_text_label(name, font);
|
||||||
|
GuiLabel* l3 = GuiLabel::make_simple_text_label(name, font);
|
||||||
|
GuiLabel* l4 = GuiLabel::make_simple_text_label(name, font);
|
||||||
|
GuiLabel* l5 = GuiLabel::make_simple_text_label(name, font);
|
||||||
|
// up
|
||||||
|
l1->set_background_color(1., 1., 1., 0.);
|
||||||
|
// up-rollover
|
||||||
|
l2->set_background_color(1., 1., 1., 0.5);
|
||||||
|
// down
|
||||||
|
l3->set_background_color(1., 1., 1., 0.);
|
||||||
|
// down-rollover
|
||||||
|
l4->set_background_color(1., 1., 1., 0.5);
|
||||||
|
// 'inactive'
|
||||||
|
l5->set_background_color(1., 0., 0., 0.7);
|
||||||
|
GuiButton* b1 = new GuiButton(name, l1, l2, l3, l4, l5);
|
||||||
|
eh.add_hook(name + "-down", func);
|
||||||
|
eh.add_hook(name + "-down-rollover", func);
|
||||||
|
return b1;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void deadrec_setup(EventHandler& eh) {
|
||||||
static bool done = false;
|
static bool done = false;
|
||||||
if (done)
|
if (done)
|
||||||
return;
|
return;
|
||||||
@ -170,6 +222,54 @@ static void deadrec_setup(void) {
|
|||||||
stop_monitoring = false;
|
stop_monitoring = false;
|
||||||
monitor = thread::create(internal_monitor, (void*)0L,
|
monitor = thread::create(internal_monitor, (void*)0L,
|
||||||
thread::PRIORITY_NORMAL);
|
thread::PRIORITY_NORMAL);
|
||||||
|
// create an interface
|
||||||
|
GuiManager* mgr = GuiManager::get_ptr(main_win, mak);
|
||||||
|
PT_Node font = ModelPool::load_model("ttf-comic");
|
||||||
|
GuiFrame* f1 = new GuiFrame("predicters");
|
||||||
|
GuiLabel* l1 = GuiLabel::make_simple_text_label("predicter:", font);
|
||||||
|
l1->set_background_color(1., 1., 1., 0.);
|
||||||
|
GuiSign* s1 = new GuiSign("predicter", l1);
|
||||||
|
s1->set_scale(0.08);
|
||||||
|
f1->add_item(s1);
|
||||||
|
pnullButton = make_button("null", font, eh, predict_event);
|
||||||
|
pnullButton->set_scale(0.08);
|
||||||
|
f1->add_item(pnullButton);
|
||||||
|
plinearButton = make_button("linear", font, eh, predict_event);
|
||||||
|
plinearButton->set_scale(0.08);
|
||||||
|
f1->add_item(plinearButton);
|
||||||
|
f1->pack_item(pnullButton, GuiFrame::UNDER, s1);
|
||||||
|
f1->pack_item(pnullButton, GuiFrame::ALIGN_LEFT, s1);
|
||||||
|
f1->pack_item(plinearButton, GuiFrame::UNDER, s1);
|
||||||
|
f1->pack_item(plinearButton, GuiFrame::RIGHT, pnullButton, 0.02);
|
||||||
|
f1->align_to_left(0.05);
|
||||||
|
f1->align_to_top(0.05);
|
||||||
|
f1->recompute();
|
||||||
|
f1->manage(mgr, eh);
|
||||||
|
GuiFrame* f2 = new GuiFrame("correctors");
|
||||||
|
GuiLabel* l2 = GuiLabel::make_simple_text_label("corrector:", font);
|
||||||
|
l2->set_background_color(1., 1., 1., 0.);
|
||||||
|
GuiSign* s2 = new GuiSign("corrector", l2);
|
||||||
|
s2->set_scale(0.08);
|
||||||
|
f2->add_item(s2);
|
||||||
|
cpopButton = make_button("pop", font, eh, correct_event);
|
||||||
|
cpopButton->set_scale(0.08);
|
||||||
|
f2->add_item(cpopButton);
|
||||||
|
clerpButton = make_button("lerp", font, eh, correct_event);
|
||||||
|
clerpButton->set_scale(0.08);
|
||||||
|
f2->add_item(clerpButton);
|
||||||
|
csplineButton = make_button("lerp", font, eh, correct_event);
|
||||||
|
csplineButton->set_scale(0.08);
|
||||||
|
f2->add_item(csplineButton);
|
||||||
|
f2->pack_item(cpopButton, GuiFrame::UNDER, s2);
|
||||||
|
f2->pack_item(cpopButton, GuiFrame::ALIGN_LEFT, s2);
|
||||||
|
f2->pack_item(clerpButton, GuiFrame::UNDER, s2);
|
||||||
|
f2->pack_item(clerpButton, GuiFrame::RIGHT, cpopButton, 0.02);
|
||||||
|
f2->pack_item(csplineButton, GuiFrame::UNDER, s2);
|
||||||
|
f2->pack_item(csplineButton, GuiFrame::RIGHT, clerpButton, 0.02);
|
||||||
|
f2->align_to_left(0.05);
|
||||||
|
f2->align_to_bottom(0.05);
|
||||||
|
f2->recompute();
|
||||||
|
f2->manage(mgr, eh);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void update_smiley(void) {
|
static void update_smiley(void) {
|
||||||
@ -182,7 +282,7 @@ static void event_frame(CPT_Event) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void deadrec_keys(EventHandler& eh) {
|
static void deadrec_keys(EventHandler& eh) {
|
||||||
deadrec_setup();
|
deadrec_setup(eh);
|
||||||
|
|
||||||
eh.add_hook("NewFrame", event_frame);
|
eh.add_hook("NewFrame", event_frame);
|
||||||
}
|
}
|
||||||
|
@ -67,7 +67,7 @@ static inline void send(NetDatagram& d) {
|
|||||||
static void event_frame(CPT_Event) {
|
static void event_frame(CPT_Event) {
|
||||||
// send deadrec data
|
// send deadrec data
|
||||||
NetDatagram d;
|
NetDatagram d;
|
||||||
send(add_pos(d));
|
send(add_time(add_pos(d)));
|
||||||
}
|
}
|
||||||
|
|
||||||
static void sync_clock(void) {
|
static void sync_clock(void) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user