Beta Release
This commit is contained in:
@@ -0,0 +1,66 @@
|
||||
using System;
|
||||
using HutongGames.PlayMaker;
|
||||
using UnityEngine;
|
||||
|
||||
namespace MSCO
|
||||
{
|
||||
/// <summary>
|
||||
/// Gemeinsame Kasse: Ändert sich das Geld (globale Variable "PlayerMoney") bei einem Spieler,
|
||||
/// wird nur die Änderung verschickt und bei allen anderen dazugerechnet. So gehen gleichzeitige
|
||||
/// Einkäufe/Einnahmen nicht verloren, und niemand überschreibt den Kontostand eines anderen.
|
||||
/// </summary>
|
||||
public class MoneySync
|
||||
{
|
||||
const string MoneyVariable = "PlayerMoney";
|
||||
const float MinChange = 0.01f;
|
||||
|
||||
FsmFloat money;
|
||||
float last;
|
||||
bool tracking;
|
||||
float pending; // Änderungen, die ankamen, bevor das Geld aus dem Spielstand geladen war
|
||||
|
||||
/// <summary>Szenenwechsel / Verbindungsende.</summary>
|
||||
public void Reset()
|
||||
{
|
||||
money = null;
|
||||
tracking = false;
|
||||
pending = 0f;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Erst beobachten, wenn das Spiel fertig geladen ist - sonst würde das Laden des
|
||||
/// Kontostands aus dem Spielstand als "Einnahme" verschickt.
|
||||
/// </summary>
|
||||
public void Begin()
|
||||
{
|
||||
if (tracking) return;
|
||||
money = FsmVariables.GlobalVariables.FindFsmFloat(MoneyVariable);
|
||||
if (money == null) return;
|
||||
money.Value += pending;
|
||||
pending = 0f;
|
||||
last = money.Value;
|
||||
tracking = true;
|
||||
}
|
||||
|
||||
public void Update(Action<MsgType, byte[]> send)
|
||||
{
|
||||
if (!tracking || money == null) return;
|
||||
float delta = money.Value - last;
|
||||
if (Mathf.Abs(delta) < MinChange) return;
|
||||
last = money.Value;
|
||||
send(MsgType.MoneyDelta, NetSession.Build(w => w.Write(delta)));
|
||||
}
|
||||
|
||||
/// <summary>Änderung von einem anderen Spieler (oder vom Server) dazurechnen.</summary>
|
||||
public void Apply(float delta)
|
||||
{
|
||||
if (!tracking || money == null)
|
||||
{
|
||||
pending += delta;
|
||||
return;
|
||||
}
|
||||
money.Value += delta;
|
||||
last += delta; // nicht als eigene Änderung zurückschicken
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user