Title Screen

This commit is contained in:
Josef 2025-07-22 16:08:35 +02:00
parent e9197fa9db
commit e840667424
39 changed files with 2594 additions and 569 deletions

File diff suppressed because one or more lines are too long

View File

@ -30,13 +30,12 @@ namespace Rokojori
this.LogInfo( eatable );
if ( eatable == null )
if ( eatable == null || ! eatable.isEatable )
{
return;
}
Trigger( eatable.onGotEaten );
eatable.GetEaten();
hasEaten = true;

View File

@ -11,5 +11,25 @@ namespace Rokojori
[Export]
public Action onGotEaten;
[Export]
public bool isEatable = true;
[Export]
public float notEatableSince = 0;
public void GetEaten()
{
if ( ! isEatable )
{
return;
}
isEatable = false;
notEatableSince = TimeLine.osTime;
Action.Trigger( onGotEaten );
Unique<RichCounter>.Get().CountUp();
}
}
}

View File

@ -0,0 +1,38 @@
using Godot;
using System.Collections;
using System.Collections.Generic;
using Godot.Collections;
namespace Rokojori
{
[GlobalClass,Tool]
public partial class EatDaRichGame:Node
{
public enum State
{
Title,
Intro,
Playing,
Outro
}
[Export]
public State state = State.Title;
public void SetState( State state )
{
this.state = state;
this.ForEachInRoot<OnState>(
( sta )=>
{
if ( sta.state == this.state )
{
Action.Trigger( sta.action );
}
}
);
}
}
}

View File

@ -0,0 +1 @@
uid://dli1mflfmrf5b

Binary file not shown.

View File

@ -0,0 +1,137 @@
{
"asset":{
"generator":"Khronos glTF Blender I/O v4.0.44",
"version":"2.0"
},
"scene":0,
"scenes":[
{
"name":"Scene",
"nodes":[
0
]
}
],
"nodes":[
{
"mesh":0,
"name":"Cube"
}
],
"materials":[
{
"doubleSided":true,
"name":"Blade",
"pbrMetallicRoughness":{
"baseColorTexture":{
"index":0
},
"metallicFactor":0,
"roughnessFactor":0.5
}
}
],
"meshes":[
{
"name":"Cube",
"primitives":[
{
"attributes":{
"POSITION":0,
"NORMAL":1,
"TEXCOORD_0":2
},
"indices":3,
"material":0
}
]
}
],
"textures":[
{
"sampler":0,
"source":0
}
],
"images":[
{
"mimeType":"image/png",
"name":"Untitled",
"uri":"textures/Untitled.png"
}
],
"accessors":[
{
"bufferView":0,
"componentType":5126,
"count":2373,
"max":[
0.041258249431848526,
0.20035196840763092,
0.039235055446624756
],
"min":[
-0.040325697511434555,
-0.009120762348175049,
-0.04579003155231476
],
"type":"VEC3"
},
{
"bufferView":1,
"componentType":5126,
"count":2373,
"type":"VEC3"
},
{
"bufferView":2,
"componentType":5126,
"count":2373,
"type":"VEC2"
},
{
"bufferView":3,
"componentType":5123,
"count":12000,
"type":"SCALAR"
}
],
"bufferViews":[
{
"buffer":0,
"byteLength":28476,
"byteOffset":0,
"target":34962
},
{
"buffer":0,
"byteLength":28476,
"byteOffset":28476,
"target":34962
},
{
"buffer":0,
"byteLength":18984,
"byteOffset":56952,
"target":34962
},
{
"buffer":0,
"byteLength":24000,
"byteOffset":75936,
"target":34963
}
],
"samplers":[
{
"magFilter":9729,
"minFilter":9987
}
],
"buffers":[
{
"byteLength":99936,
"uri":"flower.bin"
}
]
}

View File

@ -0,0 +1,37 @@
[remap]
importer="scene"
importer_version=1
type="PackedScene"
uid="uid://1dop0iwakjcq"
path="res://.godot/imported/flower.gltf-cf4eb8206e1ff3513b6cd93fd1a036cd.scn"
[deps]
source_file="res://Eat Da Rich/Flower/flower.gltf"
dest_files=["res://.godot/imported/flower.gltf-cf4eb8206e1ff3513b6cd93fd1a036cd.scn"]
[params]
nodes/root_type=""
nodes/root_name=""
nodes/apply_root_scale=true
nodes/root_scale=1.0
nodes/import_as_skeleton_bones=false
nodes/use_node_type_suffixes=true
meshes/ensure_tangents=true
meshes/generate_lods=true
meshes/create_shadow_meshes=true
meshes/light_baking=1
meshes/lightmap_texel_size=0.2
meshes/force_disable_compression=false
skins/use_named_skins=true
animation/import=true
animation/fps=30
animation/trimming=false
animation/remove_immutable_tracks=true
animation/import_rest_as_RESET=false
import_script/path=""
_subresources={}
gltf/naming_version=1
gltf/embedded_image_handling=1

Binary file not shown.

View File

@ -0,0 +1,137 @@
{
"asset":{
"generator":"Khronos glTF Blender I/O v4.0.44",
"version":"2.0"
},
"scene":0,
"scenes":[
{
"name":"Scene",
"nodes":[
0
]
}
],
"nodes":[
{
"mesh":0,
"name":"Cube"
}
],
"materials":[
{
"doubleSided":true,
"name":"Blade",
"pbrMetallicRoughness":{
"baseColorTexture":{
"index":0
},
"metallicFactor":0,
"roughnessFactor":0.5
}
}
],
"meshes":[
{
"name":"Cube",
"primitives":[
{
"attributes":{
"POSITION":0,
"NORMAL":1,
"TEXCOORD_0":2
},
"indices":3,
"material":0
}
]
}
],
"textures":[
{
"sampler":0,
"source":0
}
],
"images":[
{
"mimeType":"image/png",
"name":"Untitled",
"uri":"textures/Untitled.png"
}
],
"accessors":[
{
"bufferView":0,
"componentType":5126,
"count":2373,
"max":[
0.041258249431848526,
0.20035196840763092,
0.039235055446624756
],
"min":[
-0.040325697511434555,
-0.009120762348175049,
-0.04579003155231476
],
"type":"VEC3"
},
{
"bufferView":1,
"componentType":5126,
"count":2373,
"type":"VEC3"
},
{
"bufferView":2,
"componentType":5126,
"count":2373,
"type":"VEC2"
},
{
"bufferView":3,
"componentType":5123,
"count":12000,
"type":"SCALAR"
}
],
"bufferViews":[
{
"buffer":0,
"byteLength":28476,
"byteOffset":0,
"target":34962
},
{
"buffer":0,
"byteLength":28476,
"byteOffset":28476,
"target":34962
},
{
"buffer":0,
"byteLength":18984,
"byteOffset":56952,
"target":34962
},
{
"buffer":0,
"byteLength":24000,
"byteOffset":75936,
"target":34963
}
],
"samplers":[
{
"magFilter":9729,
"minFilter":9987
}
],
"buffers":[
{
"byteLength":99936,
"uri":"flower2.bin"
}
]
}

View File

@ -0,0 +1,37 @@
[remap]
importer="scene"
importer_version=1
type="PackedScene"
uid="uid://dlci17rbcwpem"
path="res://.godot/imported/flower2.gltf-cab8ca3d220c79835dc47ddceda3a1f6.scn"
[deps]
source_file="res://Eat Da Rich/Flower/flower2.gltf"
dest_files=["res://.godot/imported/flower2.gltf-cab8ca3d220c79835dc47ddceda3a1f6.scn"]
[params]
nodes/root_type=""
nodes/root_name=""
nodes/apply_root_scale=true
nodes/root_scale=1.0
nodes/import_as_skeleton_bones=false
nodes/use_node_type_suffixes=true
meshes/ensure_tangents=true
meshes/generate_lods=true
meshes/create_shadow_meshes=true
meshes/light_baking=1
meshes/lightmap_texel_size=0.2
meshes/force_disable_compression=false
skins/use_named_skins=true
animation/import=true
animation/fps=30
animation/trimming=false
animation/remove_immutable_tracks=true
animation/import_rest_as_RESET=false
import_script/path=""
_subresources={}
gltf/naming_version=1
gltf/embedded_image_handling=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

View File

@ -0,0 +1,35 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://b6jgjwc6err4m"
path.s3tc="res://.godot/imported/Untitled.png-622d74245192183ae117bcd8c91b8cbe.s3tc.ctex"
metadata={
"imported_formats": ["s3tc_bptc"],
"vram_texture": true
}
[deps]
source_file="res://Eat Da Rich/Flower/textures/Untitled.png"
dest_files=["res://.godot/imported/Untitled.png-622d74245192183ae117bcd8c91b8cbe.s3tc.ctex"]
[params]
compress/mode=2
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=true
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=0

22
Eat Da Rich/IsState.cs Normal file
View File

@ -0,0 +1,22 @@
using Godot;
using System.Collections;
using System.Collections.Generic;
using Godot.Collections;
namespace Rokojori
{
[GlobalClass,Tool]
public partial class IsState:SceneCondition
{
[Export]
public EatDaRichGame.State state;
public override bool Evaluate()
{
var edr = Unique<EatDaRichGame>.Get();
return edr.state == state;
}
}
}

View File

@ -0,0 +1 @@
uid://ddic2h20u28uj

Binary file not shown.

View File

@ -0,0 +1,19 @@
[remap]
importer="oggvorbisstr"
type="AudioStreamOggVorbis"
uid="uid://b1lgoiqj3t18g"
path="res://.godot/imported/eat-da-rich-intro.ogg-0640607c31bafd7fcc157b1609c9f2c6.oggvorbisstr"
[deps]
source_file="res://Eat Da Rich/Music/eat-da-rich-intro.ogg"
dest_files=["res://.godot/imported/eat-da-rich-intro.ogg-0640607c31bafd7fcc157b1609c9f2c6.oggvorbisstr"]
[params]
loop=true
loop_offset=0.0
bpm=0.0
beat_count=0
bar_beats=4

Binary file not shown.

View File

@ -0,0 +1,19 @@
[remap]
importer="oggvorbisstr"
type="AudioStreamOggVorbis"
uid="uid://bxdw5usy6qiqk"
path="res://.godot/imported/eat-da-rich-main.ogg-67b35e279ffd056c87f075c1e25e06da.oggvorbisstr"
[deps]
source_file="res://Eat Da Rich/Music/eat-da-rich-main.ogg"
dest_files=["res://.godot/imported/eat-da-rich-main.ogg-67b35e279ffd056c87f075c1e25e06da.oggvorbisstr"]
[params]
loop=true
loop_offset=0.0
bpm=0.0
beat_count=0
bar_beats=4

Binary file not shown.

20
Eat Da Rich/OnState.cs Normal file
View File

@ -0,0 +1,20 @@
using Godot;
using System.Collections;
using System.Collections.Generic;
using Godot.Collections;
namespace Rokojori
{
[GlobalClass,Tool]
public partial class OnState:Node
{
[Export]
public EatDaRichGame.State state;
[Export]
public Action action;
}
}

View File

@ -0,0 +1 @@
uid://dra5iwcr6n546

View File

@ -0,0 +1,21 @@
using Godot;
using System.Collections;
using System.Collections.Generic;
using Godot.Collections;
namespace Rokojori
{
[GlobalClass,Tool]
public partial class AdjustDeathPosition:Action
{
[Export]
public MoveTo moveTo;
protected override void _OnTrigger()
{
var player = Unique<Player>.Get();
moveTo.goal = player.transformSource;
}
}
}

View File

@ -0,0 +1 @@
uid://cqbb0slmnjrup

View File

@ -8,39 +8,49 @@ namespace Rokojori
[GlobalClass,Tool]
public partial class Pig:Node
{
[Export]
public Node3D player;
[Export]
public RigidBody3D rigidBody3D;
[Export]
public float speed = 5;
[Export]
public Smoothing rotationSmoothing;
[Export]
public Action onSpawn;
[Export]
public bool alive = true;
public override void _Process( double delta )
{
if ( player == null )
{
player = Unique<Player>.Get();
}
if ( player == null )
{
return;
}
if ( Engine.IsEditorHint() )
{
return;
}
var player = Unique<Player>.Get();
if ( player == null )
{
return;
}
var direction = player.GlobalPosition - rigidBody3D.GlobalPosition;
direction.Y = 0;
direction = direction.Normalized() * speed;
rigidBody3D.GlobalPosition += direction;
rigidBody3D.LookAt( player.GlobalPosition );
}
var nextRotation = rigidBody3D.GetGlobalQuaternion();
var rotation = Smoothing.Apply( rotationSmoothing, nextRotation, (float)delta );
rigidBody3D.SetGlobalQuaternion( rotation );
}
}
}

File diff suppressed because one or more lines are too long

View File

@ -20,13 +20,21 @@ namespace Rokojori
[Export]
public int maxPigs = 10;
[Export]
public float heightOffset = 0.6094f;
protected override void _OnTrigger()
{
if ( container.GetChildCount() >= maxPigs )
{
this.LogInfo( "Too many Pigs" );
return;
}
// this.LogInfo( "Creating Pigs" );
var n = packedScene.Instantiate() as Node3D;
if ( n == null )
@ -37,7 +45,12 @@ namespace Rokojori
container.AddChild( n );
n.GlobalPosition = GodotRandom.Get().InCube() * new Vector3( 1, 0, 1 ) * radius + new Vector3( 0, 0.5f, 0 );
var pig = n.Get<Pig>();
Trigger( pig.onSpawn );
var player = Unique<Player>.Get();
n.GlobalPosition = ( player.transformSource.GlobalPosition + GodotRandom.Get().InCube() * radius ).SetY( heightOffset );
}
}
}

View File

@ -8,6 +8,7 @@ namespace Rokojori
[GlobalClass,Tool]
public partial class Player:Node3D
{
[Export]
public Node3D transformSource;
}
}

22
Eat Da Rich/SetState.cs Normal file
View File

@ -0,0 +1,22 @@
using Godot;
using System.Collections;
using System.Collections.Generic;
using Godot.Collections;
namespace Rokojori
{
[GlobalClass,Tool]
public partial class SetState:Action
{
[Export]
public EatDaRichGame.State state;
protected override void _OnTrigger()
{
var edr = Unique<EatDaRichGame>.Get();
edr.SetState( state );
}
}
}

View File

@ -0,0 +1 @@
uid://bfxttgik5fl2a

Binary file not shown.

View File

@ -0,0 +1,35 @@
[remap]
importer="font_data_dynamic"
type="FontFile"
uid="uid://dhce1hxfq6m6o"
path="res://.godot/imported/Pacifico-Regular.ttf-2d1976d8df921ac7bd1e71b2f4923b9a.fontdata"
[deps]
source_file="res://Eat Da Rich/UI/Fonts/Pacifico-Regular.ttf"
dest_files=["res://.godot/imported/Pacifico-Regular.ttf-2d1976d8df921ac7bd1e71b2f4923b9a.fontdata"]
[params]
Rendering=null
antialiasing=1
generate_mipmaps=false
disable_embedded_bitmaps=true
multichannel_signed_distance_field=false
msdf_pixel_range=8
msdf_size=48
allow_system_fallback=true
force_autohinter=false
hinting=1
subpixel_positioning=4
keep_rounding_remainders=true
oversampling=0.0
Fallbacks=null
fallbacks=[]
Compress=null
compress=true
preload=[]
language_support={}
script_support={}
opentype_features={}

View File

@ -0,0 +1,28 @@
using Godot;
using System.Collections;
using System.Collections.Generic;
using Godot.Collections;
namespace Rokojori
{
[GlobalClass,Tool]
public partial class RichCounter:Node
{
[Export]
public int numRich = 0;
[Export]
public UIText counter;
[Export]
public Action onCountUp;
public void CountUp()
{
numRich ++;
counter.locale = LocaleText.Create( numRich + "" );
Action.Trigger( onCountUp );
}
}
}

View File

@ -0,0 +1 @@
uid://deb6l5y6anje2

View File

@ -0,0 +1,32 @@
[gd_resource type="Resource" script_class="UISettings" load_steps=10 format=3 uid="uid://cb1ex73dycv6g"]
[ext_resource type="FontFile" uid="uid://dhce1hxfq6m6o" path="res://Eat Da Rich/UI/Fonts/Pacifico-Regular.ttf" id="1_a1ryr"]
[ext_resource type="Resource" uid="uid://b4iykcwesp1y6" path="res://addons/rokojori_action_library/Runtime/Time/TimeLines/UITime.tres" id="1_tc760"]
[ext_resource type="Script" uid="uid://cnkyynboxg1qg" path="res://addons/rokojori_action_library/Runtime/UI/Styling/UINumber.cs" id="2_a1ryr"]
[ext_resource type="Resource" uid="uid://dq52vhnqr5m6" path="res://addons/rokojori_action_library/Runtime/Sensors/Default-Sensors/Default-Input-Icons-Library.tres" id="3_s3b1j"]
[ext_resource type="Script" uid="uid://cgdxalxhdbmjn" path="res://addons/rokojori_action_library/Runtime/UI/UISettings.cs" id="4_to1hh"]
[ext_resource type="Resource" uid="uid://bhy8b3gopkq4m" path="res://addons/rokojori_action_library/Runtime/UI/ShaderProperties/Vector2/Size.tres" id="5_hyaag"]
[ext_resource type="Script" uid="uid://cebfjne1ewhnm" path="res://addons/rokojori_action_library/Runtime/Shading/Properties/Vector2PropertyName.cs" id="6_bcspd"]
[sub_resource type="Resource" id="Resource_wm644"]
script = ExtResource("2_a1ryr")
value = 2.0
unit = "vw"
isAnimated = false
animationDuration = 0.0
animationOffset = 0.0
metadata/_custom_type_script = "uid://cnkyynboxg1qg"
[sub_resource type="Resource" id="Resource_6vky0"]
script = ExtResource("6_bcspd")
propertyName = "texture_size"
metadata/_custom_type_script = "uid://cebfjne1ewhnm"
[resource]
script = ExtResource("4_to1hh")
inputIconsLibrary = ExtResource("3_s3b1j")
fontSize = SubResource("Resource_wm644")
defaultFont = ExtResource("1_a1ryr")
sizePropertyName = ExtResource("5_hyaag")
textureSizePropertyName = SubResource("Resource_6vky0")
defaultTimeline = ExtResource("1_tc760")

View File

@ -1,4 +1,4 @@
<Project Sdk="Godot.NET.Sdk/4.4.1">
<Project Sdk="Godot.NET.Sdk/4.4.0">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<EnableDynamicLoading>true</EnableDynamicLoading>

View File

@ -0,0 +1,7 @@
<Project Sdk="Godot.NET.Sdk/4.4.1">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<EnableDynamicLoading>true</EnableDynamicLoading>
<RootNamespace>ExampleGrass</RootNamespace>
</PropertyGroup>
</Project>

@ -1 +1 @@
Subproject commit 08dbd8681b5c5928111156c733ff27f0555d8f8f
Subproject commit 839b0bca39bd67c1ad4ef46fb5a8600f4b1f6466

View File

@ -11,6 +11,7 @@ config_version=5
[application]
config/name="Example Grass"
run/main_scene="uid://diih6vhtswin0"
config/features=PackedStringArray("4.4", "C#", "Forward Plus")
config/icon="res://icon.svg"
@ -30,9 +31,13 @@ enabled=PackedStringArray("res://addons/rokojori_action_library/plugin.cfg")
lights_and_shadows/directional_shadow/soft_shadow_filter_quality=5
lights_and_shadows/positional_shadow/soft_shadow_filter_quality=5
camera/depth_of_field/depth_of_field_bokeh_shape=2
camera/depth_of_field/depth_of_field_bokeh_quality=3
camera/depth_of_field/depth_of_field_use_jitter=true
environment/ssao/quality=4
environment/ssao/half_size=false
environment/ssao/blur_passes=3
environment/ssil/quality=4
anti_aliasing/quality/msaa_2d=3
anti_aliasing/quality/msaa_3d=3
environment/subsurface_scattering/subsurface_scattering_quality=3