Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ SDK_BIN_DIR = sdk/redistributable_bin/$(OS)$(ARCH)
LFLAGS = -lhl -lsteam_api -lstdc++ -L $(SDK_BIN_DIR)

SRC = native/cloud.o native/common.o native/controller.o native/friends.o native/gameserver.o \
native/matchmaking.o native/networking.o native/stats.o native/ugc.o
native/matchmaking.o native/networking.o native/stats.o native/ugc.o native/timeline.o

all: ${SRC}
${CC} ${CFLAGS} -shared -o steam.hdll ${SRC} ${LFLAGS}
Expand Down
1 change: 1 addition & 0 deletions hlsteam.vcxproj
Original file line number Diff line number Diff line change
Expand Up @@ -151,6 +151,7 @@
<ClCompile Include="native\gameserver.cpp" />
<ClCompile Include="native\matchmaking.cpp" />
<ClCompile Include="native\networking.cpp" />
<ClCompile Include="native\timeline.cpp" />
<ClCompile Include="native\stats.cpp" />
<ClCompile Include="native\ugc.cpp" />
</ItemGroup>
Expand Down
48 changes: 48 additions & 0 deletions native/timeline.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
#include "steamwrap.h"

HL_PRIM void HL_NAME(set_timeline_tooltip)( vbyte* description, float timeDelta ) {
SteamTimeline()->SetTimelineTooltip((char*)description, timeDelta);
}

HL_PRIM void HL_NAME(clear_timeline_tooltip)( float timeDelta ) {
SteamTimeline()->ClearTimelineTooltip(timeDelta);
}

HL_PRIM void HL_NAME(set_timeline_game_mode)( ETimelineGameMode mode ) {
SteamTimeline()->SetTimelineGameMode(mode);
}

HL_PRIM TimelineEventHandle_t HL_NAME(add_instantaneous_timeline_event)( vbyte* title, vbyte* description, vbyte* icon, int priority, float startOffsetSeconds, ETimelineEventClipPriority possibleClip ) {
return SteamTimeline()->AddInstantaneousTimelineEvent((char*)title, (char*)description, (char*)icon, priority, startOffsetSeconds, possibleClip);
}

HL_PRIM TimelineEventHandle_t HL_NAME(add_range_timeline_event)( vbyte* title, vbyte* description, vbyte* icon, int priority, float startOffsetSeconds, float durationSeconds, ETimelineEventClipPriority possibleClip ) {
return SteamTimeline()->AddRangeTimelineEvent((char*)title, (char*)description, (char*)icon, priority, startOffsetSeconds, durationSeconds, possibleClip);
}

HL_PRIM TimelineEventHandle_t HL_NAME(start_range_timeline_event)( vbyte* title, vbyte* description, vbyte* icon, int priority, float startOffsetSeconds, ETimelineEventClipPriority possibleClip ) {
return SteamTimeline()->StartRangeTimelineEvent((char*)title, (char*)description, (char*)icon, priority, startOffsetSeconds, possibleClip);
}

HL_PRIM void HL_NAME(update_range_timeline_event)( TimelineEventHandle_t event, vbyte* title, vbyte* description, vbyte* icon, int priority, ETimelineEventClipPriority possibleClip ) {
SteamTimeline()->UpdateRangeTimelineEvent(event, (char*)title, (char*)description, (char*)icon, priority, possibleClip);
}

HL_PRIM void HL_NAME(end_range_timeline_event)( TimelineEventHandle_t event, float endOffsetSeconds ) {
SteamTimeline()->EndRangeTimelineEvent(event, endOffsetSeconds);
}

HL_PRIM void HL_NAME(remove_timeline_event)( TimelineEventHandle_t event ) {
SteamTimeline()->RemoveTimelineEvent(event);
}

#define _TIMELINEEVENT _I64
DEFINE_PRIM(_VOID, set_timeline_tooltip, _BYTES _F32);
DEFINE_PRIM(_VOID, clear_timeline_tooltip, _F32);
DEFINE_PRIM(_VOID, set_timeline_game_mode, _I32);
DEFINE_PRIM(_TIMELINEEVENT, add_instantaneous_timeline_event, _BYTES _BYTES _BYTES _I32 _F32 _I32);
DEFINE_PRIM(_TIMELINEEVENT, add_range_timeline_event, _BYTES _BYTES _BYTES _I32 _F32 _F32 _I32);
DEFINE_PRIM(_TIMELINEEVENT, start_range_timeline_event, _BYTES _BYTES _BYTES _I32 _F32 _I32);
DEFINE_PRIM(_VOID, update_range_timeline_event, _TIMELINEEVENT _BYTES _BYTES _BYTES _I32 _I32);
DEFINE_PRIM(_VOID, end_range_timeline_event, _TIMELINEEVENT _F32);
DEFINE_PRIM(_VOID, remove_timeline_event, _TIMELINEEVENT);
72 changes: 72 additions & 0 deletions steam/Timeline.hx
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
package steam;

enum abstract ETimelineGameMode(Int) from Int to Int {
var Invalid = 0;
var Playing = 1;
var Staging = 2;
var Menus = 3;
var LoadingScreen = 4;
}

enum abstract ETimelineEventClipPriority(Int) from Int to Int {
var Invalid = 0;
var None = 1;
var Standard = 2;
var Featured = 3;
}

typedef TimelineEventHandle = hl.I64;

@:access(steam.TimelineNative)
class Timeline {
public static function setTimelineTooltip(description:String, timeDelta:Float):Void {
@:privateAccess TimelineNative.setTimelineTooltip(description.toUtf8(), timeDelta);
}

public static function clearTimelineTooltip(timeDelta:Float):Void {
TimelineNative.clearTimelineTooltip(timeDelta);
}

public static function setTimelineGameMode(mode:ETimelineGameMode):Void {
TimelineNative.setTimelineGameMode(mode);
}

public static function addInstantaneousTimelineEvent(title:String, description:String, icon:String, priority:Int, startOffsetSeconds:Float, possibleClip:ETimelineEventClipPriority = None):TimelineEventHandle {
return @:privateAccess TimelineNative.addInstantaneousTimelineEvent(title.toUtf8(), description.toUtf8(), icon.toUtf8(), priority, startOffsetSeconds, possibleClip);
}

public static function addRangeTimelineEvent(title:String, description:String, icon:String, priority:Int, startOffsetSeconds:Float, durationSeconds:Float, possibleClip:ETimelineEventClipPriority = None):TimelineEventHandle {
return @:privateAccess TimelineNative.addRangeTimelineEvent(title.toUtf8(), description.toUtf8(), icon.toUtf8(), priority, startOffsetSeconds, durationSeconds, possibleClip);
}

public static function startRangeTimelineEvent(title:String, description:String, icon:String, priority:Int, startOffsetSeconds:Float, possibleClip:ETimelineEventClipPriority = None):TimelineEventHandle {
return @:privateAccess TimelineNative.startRangeTimelineEvent(title.toUtf8(), description.toUtf8(), icon.toUtf8(), priority, startOffsetSeconds, possibleClip);
}

public static function updateRangeTimelineEvent(event:TimelineEventHandle, title:String, description:String, icon:String, priority:Int, possibleClip:ETimelineEventClipPriority = None):Void {
@:privateAccess TimelineNative.updateRangeTimelineEvent(event, title.toUtf8(), description.toUtf8(), icon.toUtf8(), priority, possibleClip);
}

public static function endRangeTimelineEvent(event:TimelineEventHandle, endOffsetSeconds:Float):Void {
TimelineNative.endRangeTimelineEvent(event, endOffsetSeconds);
}

public static function removeTimelineEvent(event:TimelineEventHandle):Void {
TimelineNative.removeTimelineEvent(event);
}
}

@:hlNative("steam")
class TimelineNative {
static function setTimelineTooltip(description:hl.Bytes, timeDelta:hl.F32):Void {}
static function clearTimelineTooltip(timeDelta:hl.F32):Void {}
static function setTimelineGameMode(mode:Int):Void {}

static function addInstantaneousTimelineEvent(title:hl.Bytes, description:hl.Bytes, icon:hl.Bytes, priority:Int, startOffsetSeconds:hl.F32, possibleClip:Int):hl.I64 { return 0; }
static function addRangeTimelineEvent(title:hl.Bytes, description:hl.Bytes, icon:hl.Bytes, priority:Int, startOffsetSeconds:hl.F32, durationSeconds:hl.F32, possibleClip:Int):hl.I64 { return 0; }

static function startRangeTimelineEvent(title:hl.Bytes, description:hl.Bytes, icon:hl.Bytes, priority:Int, startOffsetSeconds:hl.F32, possibleClip:Int):hl.I64 { return 0; }
static function updateRangeTimelineEvent(event:hl.I64, title:hl.Bytes, description:hl.Bytes, icon:hl.Bytes, priority:Int, possibleClip:Int):Void {}
static function endRangeTimelineEvent(event:hl.I64, endOffsetSeconds:hl.F32):Void {}
static function removeTimelineEvent(event:hl.I64):Void {}
}