dofdemo branch

This commit is contained in:
ethan merchant 2024-12-04 23:31:33 -05:00
parent 2c56f6fe52
commit b182017f12
20 changed files with 112 additions and 76 deletions

View file

@ -1,9 +1,9 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8" ?>
<manifest <manifest
xmlns:android="http://schemas.android.com/apk/res/android" xmlns:android="http://schemas.android.com/apk/res/android"
package="com.dofdev.slash" package="com.dofdev.dofdemo"
android:versionCode="48" android:versionCode="1"
android:versionName="1.53" android:versionName="1.01"
android:installLocation="auto" android:installLocation="auto"
> >
<uses-sdk android:minSdkVersion="29" android:targetSdkVersion="32" /> <uses-sdk android:minSdkVersion="29" android:targetSdkVersion="32" />
@ -17,25 +17,43 @@
<!-- <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" /> --> <!-- <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" /> -->
<!-- Generic OpenXR items --> <!-- Generic OpenXR items -->
<uses-feature android:name="android.hardware.vr.headtracking" android:required="true" android:version="1" /> <uses-feature
android:name="android.hardware.vr.headtracking"
android:required="true"
android:version="1"
/>
<uses-permission android:name="org.khronos.openxr.permission.OPENXR_SYSTEM" /> <uses-permission android:name="org.khronos.openxr.permission.OPENXR_SYSTEM" />
<uses-permission android:name="org.khronos.openxr.permission.OPENXR" /> <uses-permission android:name="org.khronos.openxr.permission.OPENXR" />
<queries> <queries>
<provider android:authorities="org.khronos.openxr.runtime_broker;org.khronos.openxr.system_runtime_broker" /> <provider
<intent> <action android:name="org.khronos.openxr.OpenXRRuntimeService" /> </intent> android:authorities="org.khronos.openxr.runtime_broker;org.khronos.openxr.system_runtime_broker"
<intent> <action android:name="org.khronos.openxr.OpenXRApiLayerService" /> </intent> />
<intent> <action
android:name="org.khronos.openxr.OpenXRRuntimeService"
/> </intent>
<intent> <action
android:name="org.khronos.openxr.OpenXRApiLayerService"
/> </intent>
</queries> </queries>
<!-- Vive specific items --> <!-- Vive specific items -->
<uses-feature android:name="wave.feature.handtracking" android:required="false" /> <uses-feature
<uses-feature android:name="wave.feature.tracker" android:required="false" /> android:name="wave.feature.handtracking"
android:required="false"
/>
<uses-feature android:name="wave.feature.tracker" android:required="false" />
<!-- Snapdragon specific items --> <!-- Snapdragon specific items -->
<uses-permission android:name="com.qualcomm.qti.qxr.QXRServiceClientPermission" android:required="false" /> <uses-permission
android:name="com.qualcomm.qti.qxr.QXRServiceClientPermission"
android:required="false"
/>
<queries> <queries>
<package android:name="com.qualcomm.qti.spaces.services" /> <package android:name="com.qualcomm.qti.spaces.services" />
<package android:name="com.qualcomm.qti.openxrruntime" /> <package android:name="com.qualcomm.qti.openxrruntime" />
<intent> <action android:name="com.qualcomm.qti.openxr.spaces.intent.action.BIND" /> </intent> <intent> <action
android:name="com.qualcomm.qti.openxr.spaces.intent.action.BIND"
/> </intent>
</queries> </queries>
<!-- Oculus specific items --> <!-- Oculus specific items -->
@ -45,25 +63,52 @@
<uses-permission android:name="com.oculus.permission.EYE_TRACKING" /> <uses-permission android:name="com.oculus.permission.EYE_TRACKING" />
<uses-permission android:name="com.oculus.permission.USE_ANCHOR_API" /> <uses-permission android:name="com.oculus.permission.USE_ANCHOR_API" />
<uses-permission android:name="com.oculus.permission.USE_SCENE" /> <uses-permission android:name="com.oculus.permission.USE_SCENE" />
<uses-feature android:name="com.oculus.feature.PASSTHROUGH" android:required="true" /> <uses-feature
<uses-feature android:name="oculus.software.handtracking" android:required="false" /> android:name="com.oculus.feature.PASSTHROUGH"
<uses-feature android:name="com.oculus.software.body_tracking" android:required="false" /> android:required="true"
<uses-feature android:name="oculus.software.face_tracking" android:required="false" /> />
<uses-feature android:name="oculus.software.eye_tracking" android:required="false" /> <uses-feature
android:name="oculus.software.handtracking"
android:required="false"
/>
<uses-feature
android:name="com.oculus.software.body_tracking"
android:required="false"
/>
<uses-feature
android:name="oculus.software.face_tracking"
android:required="false"
/>
<uses-feature
android:name="oculus.software.eye_tracking"
android:required="false"
/>
<application <application
android:allowBackup="false" android:allowBackup="false"
android:icon="@mipmap/appicon" android:icon="@mipmap/appicon"
android:label="slash in a Box" android:label="dofdemo"
android:roundIcon="@mipmap/appicon_round" android:roundIcon="@mipmap/appicon_round"
android:supportsRtl="true" android:supportsRtl="true"
> >
<!-- Oculus --> <!-- Oculus -->
<meta-data android:name="com.oculus.supportedDevices" android:value="quest2|quest3|questpro" /> <meta-data
<meta-data android:name="com.oculus.handtracking.version" android:value="V2.0" /> android:name="com.oculus.supportedDevices"
<meta-data android:name="com.oculus.ossplash.background" android:value="passthrough-contextual" /> android:value="quest2|quest3|questpro"
/>
<meta-data
android:name="com.oculus.handtracking.version"
android:value="V2.0"
/>
<meta-data
android:name="com.oculus.ossplash.background"
android:value="passthrough-contextual"
/>
<meta-data android:name="com.oculus.vr.focusaware" android:value="true" /> <meta-data android:name="com.oculus.vr.focusaware" android:value="true" />
<uses-native-library android:name="libopenxr_forwardloader.oculus.so" android:required="false" /> <uses-native-library
android:name="libopenxr_forwardloader.oculus.so"
android:required="false"
/>
<!-- Pico --> <!-- Pico -->
<meta-data android:name="pvr.app.type" android:value="vr" /> <meta-data android:name="pvr.app.type" android:value="vr" />
<meta-data android:name="handtracking" android:value="1" /> <meta-data android:name="handtracking" android:value="1" />
@ -71,7 +116,7 @@
<meta-data android:name="spaces.version" android:value="0.15.0" /> <meta-data android:name="spaces.version" android:value="0.15.0" />
<activity <activity
android:name="slash.MainActivity" android:name="dofdemo.MainActivity"
android:launchMode="singleTask" android:launchMode="singleTask"
android:excludeFromRecents="false" android:excludeFromRecents="false"
android:screenOrientation="landscape" android:screenOrientation="landscape"
@ -86,4 +131,4 @@
</intent-filter> </intent-filter>
</activity> </activity>
</application> </application>
</manifest> </manifest>

View file

@ -9,7 +9,7 @@ using System;
using System.Reflection; using System.Reflection;
using System.Threading; using System.Threading;
namespace slash; namespace dofdemo;
[Activity(Label = "@string/app_name", MainLauncher = true, Exported = true)] [Activity(Label = "@string/app_name", MainLauncher = true, Exported = true)]
[IntentFilter(new[] { Intent.ActionMain }, Categories = new[] { "org.khronos.openxr.intent.category.IMMERSIVE_HMD", "com.oculus.intent.category.VR", Intent.CategoryLauncher })] [IntentFilter(new[] { Intent.ActionMain }, Categories = new[] { "org.khronos.openxr.intent.category.IMMERSIVE_HMD", "com.oculus.intent.category.VR", Intent.CategoryLauncher })]

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View file

@ -1,4 +1,4 @@
<resources> <resources>
<string name="app_name">slash</string> <string name="app_name">dofdemo</string>
<string name="app_text">slash</string> <string name="app_text">dofdemo</string>
</resources> </resources>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 110 KiB

After

Width:  |  Height:  |  Size: 109 KiB

View file

@ -4,10 +4,10 @@
<RuntimeIdentifiers>android-arm64</RuntimeIdentifiers> <RuntimeIdentifiers>android-arm64</RuntimeIdentifiers>
<SupportedOSPlatformVersion>29</SupportedOSPlatformVersion> <SupportedOSPlatformVersion>29</SupportedOSPlatformVersion>
<OutputType>Exe</OutputType> <OutputType>Exe</OutputType>
<ApplicationId>com.dofdev.slash</ApplicationId> <ApplicationId>com.dofdev.dofdemo</ApplicationId>
<ApplicationVersion>1</ApplicationVersion> <ApplicationVersion>1</ApplicationVersion>
<ApplicationDisplayVersion>1.0</ApplicationDisplayVersion> <ApplicationDisplayVersion>1.0</ApplicationDisplayVersion>
<RootNamespace>slash</RootNamespace> <RootNamespace>dofdemo</RootNamespace>
<ReadOnlyProject>true</ReadOnlyProject> <ReadOnlyProject>true</ReadOnlyProject>
<SKOpenXRLoader>Standard</SKOpenXRLoader> <SKOpenXRLoader>Standard</SKOpenXRLoader>

View file

@ -23,16 +23,16 @@ adb connect 192.168.1.219
# publish build # publish build
# increment version in Platforms/Android/AndroidManifest.xml # increment version in Platforms/Android/AndroidManifest.xml
dotnet publish -c Release Projects/Android/slash.Android.csproj dotnet publish -c Release Projects/Android/dofdemo.Android.csproj
# adb install Projects/Android/bin/Release/net7.0-android/com.dofdev.slash-Signed.apk # adb install Projects/Android/bin/Release/net7.0-android/com.dofdev.dofdemo-Signed.apk
# upload quest # upload quest
source .env source .env
./ovr-platform-util upload-quest-build -a $APP_ID -s $APP_SECRET --apk $APK_PATH -c alpha -n "message" ./ovr-platform-util upload-quest-build -a $APP_ID -s $APP_SECRET --apk $APK_PATH -c alpha -n "message"
# debug # debug
adb logcat | grep com.dofdev.slash adb logcat | grep com.dofdev.dofdemo
# install a specific android platform # install a specific android platform
@ -41,29 +41,19 @@ sdkmanager "platforms;android-33" "build-tools;33.0.0"
``` ```
todo todo
pitch centralized app for our interaction tech demos
anime slasher with juicy dofs
target audience/experience target audience/experience
~13-18-year-olds who enjoy competitive, skill-based, solo gaming peers to get a feel of some of our interactions without in a time efficient manner
360 standing experience on all openxr hmds send and forget (perfect ux / no confusion or hand holding needed)
user/dev level editor for additional creative expression and content headroom
moderate learning curve
stylized visuals
fun to play daily for a couple weeks or so
core mechanics featuring:
stretch slash [] stretch_cursor
revolver [] color_cube
flick reload [] orbital_view
[] fullstick
enemy design [] twist_cursor
dmg [] cubic_flow
spd def
3 single types *fodder
dmg, spd, def
3 double types *competent
dmg+spd, spd+def, def+dmg
bug(s) bug(s)
... ...

View file

@ -1,7 +1,7 @@
using System.Collections.Generic; using System.Collections.Generic;
using StereoKit; using StereoKit;
namespace slash; namespace dofdemo;
static class Arts static class Arts
{ {
@ -13,7 +13,7 @@ static class Arts
static Material mat_backface = new Material("backface.hlsl"); static Material mat_backface = new Material("backface.hlsl");
static Material mat_justcolor = new Material("justcolor.hlsl"); static Material mat_justcolor = new Material("justcolor.hlsl");
static Material mat_slash = new Material("unlit.hlsl"); static Material mat_dofdemo = new Material("unlit.hlsl");
public static Vec3 shake = new(0, 0, 0); public static Vec3 shake = new(0, 0, 0);
// static Quat spin_ori = Quat.Identity; // static Quat spin_ori = Quat.Identity;
@ -44,7 +44,7 @@ static class Arts
mat_both.Chain = mat_backface; mat_both.Chain = mat_backface;
mat_slash.FaceCull = Cull.None; mat_dofdemo.FaceCull = Cull.None;
} }
public static void Frame() public static void Frame()
@ -114,7 +114,7 @@ static class Arts
} }
); );
mesh.Draw( mesh.Draw(
mat_slash, mat_dofdemo,
Matrix.Identity, Matrix.Identity,
Color.Hex(0xF9BF05FF).ToLinear() Color.Hex(0xF9BF05FF).ToLinear()
); );

View file

@ -1,6 +1,6 @@
using System; using System;
namespace slash; namespace dofdemo;
public static class Maths public static class Maths
{ {

View file

@ -1,7 +1,7 @@
using System.Collections.Generic; using System.Collections.Generic;
using StereoKit; using StereoKit;
namespace slash; namespace dofdemo;
static class Mono static class Mono
{ {
@ -27,7 +27,7 @@ static class Mono
{ {
game_time = 0.0; game_time = 0.0;
world_pose = new(0, -1, -2); world_pose = new(0, -1, -2);
menu = new(true); menu = new(false);
menu_pose = new(0, 0, 0); menu_pose = new(0, 0, 0);
menu_scale = 1 * U.cm; menu_scale = 1 * U.cm;
mode = Mode.Mount; mode = Mode.Mount;

View file

@ -2,7 +2,7 @@ using StereoKit;
using StereoKit.Framework; using StereoKit.Framework;
namespace slash; namespace dofdemo;
class Program class Program
{ {
@ -13,7 +13,7 @@ class Program
// Initialize StereoKit // Initialize StereoKit
SKSettings settings = new SKSettings SKSettings settings = new SKSettings
{ {
appName = "slash", appName = "dofdemo",
assetsFolder = "Assets", assetsFolder = "Assets",
blendPreference = DisplayBlend.AnyTransparent, blendPreference = DisplayBlend.AnyTransparent,
// overlayApp = true, // overlayApp = true,
@ -22,6 +22,7 @@ class Program
disableFlatscreenMRSim = true, disableFlatscreenMRSim = true,
renderScaling = 2, renderScaling = 2,
renderMultisample = 0, renderMultisample = 0,
// mode = AppMode.Simulator,
}; };
if (!SK.Initialize(settings)) if (!SK.Initialize(settings))
@ -31,7 +32,7 @@ class Program
World.OcclusionEnabled = true; World.OcclusionEnabled = true;
Device.DisplayBlend = DisplayBlend.AnyTransparent; Device.DisplayBlend = DisplayBlend.AnyTransparent;
Renderer.EnableSky = false; Renderer.EnableSky = false;
Renderer.ClearColor = Color.Hex(0x42A590FF).ToLinear();// new Color(0.0f, 0.0f, 0.0f, 0.0f); Renderer.ClearColor = Color.Hex(0x808080FF).ToLinear();// new Color(0.0f, 0.0f, 0.0f, 0.0f);
Rig.Init(); Rig.Init();
Mono.Init(); Mono.Init();

View file

@ -1,6 +1,6 @@
using StereoKit; using StereoKit;
namespace slash; namespace dofdemo;
static class Rig static class Rig
{ {

View file

@ -1,6 +1,6 @@
using StereoKit; using StereoKit;
namespace slash; namespace dofdemo;
static class SFX static class SFX
{ {

View file

@ -1,6 +1,6 @@
using StereoKit; using StereoKit;
namespace slash; namespace dofdemo;
static class VCam static class VCam
{ {

View file

@ -1,7 +1,7 @@
using StereoKit; using StereoKit;
using System; using System;
namespace slash; namespace dofdemo;
static class VFX static class VFX
{ {