Skip to content

Commit

Permalink
0.3.7.785
Browse files Browse the repository at this point in the history
  • Loading branch information
gleblebedev committed Apr 6, 2024
1 parent 2465a7d commit 8afa999
Show file tree
Hide file tree
Showing 11 changed files with 436 additions and 115 deletions.
2 changes: 1 addition & 1 deletion .config/dotnet-tools.json
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
]
},
"unofficial.Urho3DNet.Editor": {
"version": "0.3.7.757",
"version": "0.3.7.785",
"commands": [
"rbfx"
]
Expand Down
2 changes: 1 addition & 1 deletion Directory.Build.props
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<Project>
<PropertyGroup>
<Urho3DNetVersion>0.3.7.757</Urho3DNetVersion>
<Urho3DNetVersion>0.3.7.785</Urho3DNetVersion>
</PropertyGroup>
</Project>
28 changes: 26 additions & 2 deletions RbfxTemplate/GameRmlUIComponent.cs
Original file line number Diff line number Diff line change
@@ -1,16 +1,40 @@
using Urho3DNet;
using System.ComponentModel;
using Urho3DNet;

namespace RbfxTemplate
{
[ObjectFactory(Category = "Component/Game")]
[Preserve(AllMembers = true)]
public class GameRmlUIComponent : RmlUIComponent
{
private RmlUIStateBase _state;

public GameRmlUIComponent(Context context) : base(context)
{
}

public RmlUIStateBase State { get; set; }
public RmlUIStateBase State
{
get => _state;
set
{
if (_state != value)
{
if (_state != null)
_state.PropertyChanged -= OnPropertyChanged;

_state = value;

if (_state != null)
_state.PropertyChanged += OnPropertyChanged;
}
}
}

private void OnPropertyChanged(object sender, PropertyChangedEventArgs e)
{
DirtyVariable(e.PropertyName);
}

public void UpdateProperties()
{
Expand Down
103 changes: 54 additions & 49 deletions RbfxTemplate/GameState.cs
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,16 @@ public sealed class GameState : RmlUIStateBase
private readonly Random _random = new Random();
private readonly List<Tile> _currentTiles = new List<Tile>();

/// <summary>
/// State interaction manager. Track active interactions.
/// </summary>
private readonly StatePointerInteractionManager _stateManager;

/// <summary>
/// Input adapter to handle arrow keys.
/// </summary>
private readonly DirectionalPadAdapter _directionalPad;

private readonly Tuple<string, string>[] _pairs =
{
Tuple.Create("emoji_u1f436", "emoji_u1f431"),
Expand Down Expand Up @@ -63,6 +73,10 @@ public GameState(UrhoPluginApplication app) : base(app, "UI/GameScreen.rml")

_raycastResult = new PhysicsRaycastResult();

// Initialize state interaction manager.
_stateManager = new StatePointerInteractionManager();
_stateManager.LastKnownMousePosition = Input.MousePosition;

_app = app;
_scene = Context.CreateObject<Scene>();
_scene.Ptr.LoadXML("Scenes/Scene.scene");
Expand All @@ -87,27 +101,15 @@ public GameState(UrhoPluginApplication app) : base(app, "UI/GameScreen.rml")
_dragState = new DragState(this);
_victoryState = new VictoryState(this);

_directionalPad = new DirectionalPadAdapter(Context);

_confettiAnimation = new ActionBuilder(Context).Enable().ShaderParameterFromTo(1.0f, "AnimationPhase", 0.0f, 1.0f).Disable().Build();

NextLevel(null);

Deactivate();
}

public StateBase State
{
get => _state;
set
{
if (_state != value)
{
_state?.Deactivate();
_state = value;
_state?.Activate();
}
}
}

public override void OnDataModelInitialized(GameRmlUIComponent component)
{
component.BindDataModelProperty("Level", _ => _.Set("Level " + _levelIndex), _ => { });
Expand All @@ -125,7 +127,7 @@ private void Settings(VariantList obj)

public override void Activate(StringVariantMap bundle)
{
SubscribeToEvent(E.KeyUp, HandleKeyUp);
SubscribeToEvent(E.KeyUp, HandleEscKeyUp);

SubscribeToEvent(E.MouseButtonDown, HandleMouseDown);
SubscribeToEvent(E.MouseButtonUp, HandleMouseUp);
Expand All @@ -135,6 +137,8 @@ public override void Activate(StringVariantMap bundle)
SubscribeToEvent(E.TouchEnd, HandleTouchEnd);
SubscribeToEvent(E.TouchMove, HandleTouchMove);

_directionalPad.IsEnabled = true;

_scene.Ptr.IsUpdateEnabled = true;


Expand All @@ -143,7 +147,7 @@ public override void Activate(StringVariantMap bundle)

public override void Update(float timeStep)
{
_state.Update(timeStep);
_stateManager.State.Update(timeStep);

var orthoSizeY = _areaSize.Y;
var orthoSizeX = _areaSize.X * UI.Size.Y / UI.Size.X;
Expand Down Expand Up @@ -238,15 +242,15 @@ public Tile PickTile(IntVector2 inputMousePosition)
return null;
}

public void DragTile(Tile tile, int? touchId)
public void DragTile(Tile tile, InteractionKey interactionKey)
{
_dragState.TrackTile(tile, touchId);
State = _dragState;
_dragState.TrackTile(tile, interactionKey);
_stateManager.State = _dragState;
}

public void StartPicking()
{
State = _pickState;
_stateManager.State = _pickState;

var isComplete = true;
var isCorrect = true;
Expand Down Expand Up @@ -316,7 +320,7 @@ private void Victory()
{
ActionManager.AddAction(_confettiAnimation, node);
}
State = _victoryState;
_stateManager.State = _victoryState;
_victory = true;
RmlUiComponent.UpdateProperties();
}
Expand All @@ -332,54 +336,55 @@ private void Randomize(List<Node> rightTiles)

private void HandleTouchBegin(VariantMap args)
{
var touchId = args[E.TouchBegin.TouchID].Int;
var x = args[E.TouchBegin.X].Int;
var y = args[E.TouchBegin.Y].Int;
_state.HandleTouchBegin(touchId, new IntVector2(x, y));
_stateManager.HandleTouchBegin(args);
}

private void HandleTouchEnd(VariantMap args)
{
var touchId = args[E.TouchEnd.TouchID].Int;
var x = args[E.TouchEnd.X].Int;
var y = args[E.TouchEnd.Y].Int;
_state.HandleTouchEnd(touchId, new IntVector2(x, y));
_stateManager.HandleTouchEnd(args);
}

private void HandleTouchMove(VariantMap args)
{
var touchId = args[E.TouchMove.TouchID].Int;
var x = args[E.TouchMove.X].Int;
var y = args[E.TouchMove.Y].Int;
_state.HandleTouchMove(touchId, new IntVector2(x, y));
_stateManager.HandleTouchMove(args);
}

private void HandleMouseMove(VariantMap args)
{
var buttons = args[E.MouseMove.Buttons].Int;
var qualifiers = args[E.MouseMove.Qualifiers].Int;
var x = args[E.MouseMove.X].Int;
var y = args[E.MouseMove.Y].Int;
_state.HandleMouseMove(new IntVector2(x, y), buttons, qualifiers);
_stateManager.HandleMouseMove(args);
}

private void HandleMouseUp(VariantMap args)
{
_stateManager.HandleMouseUp(args);
}

private void HandleMouseUp(StringHash arg1, VariantMap args)
private void HandleMouseDown(VariantMap args)
{
var buttons = args[E.MouseButtonUp.Buttons].Int;
var qualifiers = args[E.MouseButtonUp.Qualifiers].Int;
var button = args[E.MouseButtonUp.Button].Int;
_state.HandleMouseUp(button, Context.Input.MousePosition, buttons, qualifiers);
_stateManager.HandleMouseDown(args);
}

private void HandleMouseDown(StringHash arg1, VariantMap args)
private void HandleDpadKeyDown(VariantMap args)
{
var buttons = args[E.MouseButtonDown.Buttons].Int;
var qualifiers = args[E.MouseButtonDown.Qualifiers].Int;
var button = args[E.MouseButtonDown.Button].Int;
_state.HandleMouseDown(button, Context.Input.MousePosition, buttons, qualifiers);
var scanCode =(Scancode)args[E.KeyUp.Scancode].Int;
switch (scanCode)
{
case Scancode.ScancodeUp:
_stateManager.HandleDpad(HatPosition.HatUp);
break;
case Scancode.ScancodeDown:
_stateManager.HandleDpad(HatPosition.HatDown);
break;
case Scancode.ScancodeLeft:
_stateManager.HandleDpad(HatPosition.HatLeft);
break;
case Scancode.ScancodeRight:
_stateManager.HandleDpad(HatPosition.HatRight);
break;
}
}

private void HandleKeyUp(VariantMap args)
private void HandleEscKeyUp(VariantMap args)
{
var key = (Key)args[E.KeyUp.Key].Int;
switch (key)
Expand Down
46 changes: 24 additions & 22 deletions RbfxTemplate/GameStates/DragState.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,56 +4,58 @@ namespace RbfxTemplate.GameStates
{
public class DragState : StateBase
{
InteractionKey? _interactionKey;

private Tile _tile;
private int? _touchId;

public DragState(GameState game) : base(game)
{
}

public override void Activate()
{
_tile.Link.IsEnabled = true;
base.Activate();
}
if (_tile != null)
{
_tile.Link.IsEnabled = true;
}

public override void Deactivate()
{
base.Deactivate();
base.Activate();
}

public override void HandleMouseMove(IntVector2 intVector2, int buttons, int qualifiers)
public override void EndInteraction(InteractionKey interactionKey, IntVector2 interactionPosition)
{
if (_touchId.HasValue) return;
if (interactionKey != _interactionKey)
return;

MoveLink(intVector2);
CompleteLink(interactionPosition);
_interactionKey = null;
}

public override void HandleMouseUp(int button, IntVector2 inputMousePosition, int buttons, int qualifiers)
public override void CancelInteraction(InteractionKey interactionKey, IntVector2 interactionPosition)
{
if (_touchId.HasValue) return;
if (interactionKey != _interactionKey)
return;

CompleteLink(inputMousePosition);
_interactionKey = null;
Game.StartPicking();
}

public override void HandleTouchMove(int touchId, IntVector2 intVector2)
public override void UpdateInteraction(InteractionKey interactionKey, IntVector2 interactionPosition)
{
if (_touchId != touchId) return;
if (interactionKey != _interactionKey)
return;

MoveLink(intVector2);
MoveLink(interactionPosition);
}

public override void HandleTouchEnd(int touchId, IntVector2 intVector2)
public override void Update(float timeStep)
{
if (_touchId != touchId) return;

CompleteLink(intVector2);
}

public void TrackTile(Tile tile, int? touchId)
public void TrackTile(Tile tile, InteractionKey interactionKey)
{
_tile = tile;
_touchId = touchId;
_interactionKey = interactionKey;
tile.LinkTo(null);
var material = Context.ResourceCache.GetResource<Material>("Materials/White.material");
tile.Link.GetComponent<AnimatedModel>(true).SetMaterial(material);
Expand Down
Loading

0 comments on commit 8afa999

Please sign in to comment.