Good taco
This commit is contained in:
parent
fda04762c6
commit
35bf13bf72
@ -573,7 +573,7 @@ SpriteRenderer:
|
||||
m_SortingLayer: 0
|
||||
m_SortingOrder: 0
|
||||
m_Sprite: {fileID: 21300000, guid: ff874d8acc5af46fb9cd88466b65e0af, type: 3}
|
||||
m_Color: {r: 1, g: 0, b: 0, a: 1}
|
||||
m_Color: {r: 0.75, g: 0.13786764, b: 0.13786764, a: 1}
|
||||
m_FlipX: 0
|
||||
m_FlipY: 0
|
||||
m_DrawMode: 0
|
||||
@ -877,10 +877,6 @@ MonoBehaviour:
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
playerID: 0
|
||||
distanceToRun: 300
|
||||
wheelDiameter: 0.7
|
||||
ticPerTurn: 1
|
||||
speedIntegrationTime: 1
|
||||
maxTimeDlt: 1
|
||||
--- !u!1 &1051925801
|
||||
GameObject:
|
||||
@ -1307,10 +1303,6 @@ MonoBehaviour:
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
playerID: 1
|
||||
distanceToRun: 400
|
||||
wheelDiameter: 0.559
|
||||
ticPerTurn: 2
|
||||
speedIntegrationTime: 1
|
||||
maxTimeDlt: 1
|
||||
--- !u!114 &1718131635
|
||||
MonoBehaviour:
|
||||
|
@ -8,20 +8,12 @@ public class BikeManager : MonoBehaviour {
|
||||
[SerializeField]
|
||||
public int playerID; // {get; set; }
|
||||
// metric system ftw
|
||||
[SerializeField]
|
||||
private float distanceToRun = 100f; // {get; set; }
|
||||
[SerializeField]
|
||||
private float wheelDiameter = .559f; // {get; set; }
|
||||
[SerializeField]
|
||||
private int ticPerTurn = 4;
|
||||
[SerializeField]
|
||||
private float speedIntegrationTime = .5f;
|
||||
|
||||
private string inputID;
|
||||
private float distancePerTick;
|
||||
private float distanceRun;
|
||||
private float normalSpeed;
|
||||
|
||||
// external conf
|
||||
private float distanceToRun;
|
||||
|
||||
public float Speed {get; set; }
|
||||
|
||||
private Queue<float> impulses = new Queue<float>();
|
||||
@ -29,6 +21,7 @@ public class BikeManager : MonoBehaviour {
|
||||
private float lastTimeDlt;
|
||||
public float maxTimeDlt = 1.0f;
|
||||
private float filteredSpeed;
|
||||
private Tachometer taco;
|
||||
|
||||
private VideoManager vm;
|
||||
|
||||
@ -43,34 +36,20 @@ public class BikeManager : MonoBehaviour {
|
||||
gm.RegisterBike(this, playerID);
|
||||
|
||||
distanceToRun = gm.GetRaceDistance();
|
||||
Debug.Log("Hello ima stupid bike and i should go until " + gm.GetRaceDistance());
|
||||
|
||||
taco = gameObject.AddComponent<RAWTachometer>();
|
||||
taco.SetPlayer(playerID);
|
||||
|
||||
vm = gameObject.GetComponent<VideoManager>();
|
||||
|
||||
// TODO: Refactor w a player manager ?
|
||||
switch (playerID) {
|
||||
case 0:
|
||||
inputID = "WheelP1";
|
||||
break;
|
||||
case 1:
|
||||
inputID = "WheelP2";
|
||||
break;
|
||||
}
|
||||
|
||||
distancePerTick = wheelDiameter * Mathf.PI / ticPerTurn;
|
||||
Debug.Log("Distance to run:" + distanceToRun);
|
||||
Debug.Log("Distance per tick:" + distancePerTick);
|
||||
|
||||
normalSpeed = distanceToRun / vm.raceFinishTime;
|
||||
}
|
||||
|
||||
// Update is called once per frame
|
||||
void Update () {
|
||||
if (Input.GetButtonDown(inputID))
|
||||
WheelTic();
|
||||
|
||||
//Speed = getBikeSpeedLegacy(speedIntegrationTime);
|
||||
Speed = getBikeSpeedApproxFiltered();
|
||||
Speed = taco.GetSpeed();
|
||||
|
||||
vm.speed = Speed / normalSpeed;
|
||||
}
|
||||
@ -78,63 +57,63 @@ public class BikeManager : MonoBehaviour {
|
||||
void FixedUpdate() {
|
||||
}
|
||||
|
||||
int getBikeImpulses(float timeWindow = .5f) {
|
||||
if (impulses.Count == 0) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
float time = Time.time;
|
||||
float delta = time - impulses.Peek();
|
||||
while (delta > timeWindow) {
|
||||
impulses.Dequeue();
|
||||
if (impulses.Count == 0) {
|
||||
break;
|
||||
}
|
||||
delta = time - impulses.Peek();
|
||||
}
|
||||
return impulses.Count;
|
||||
}
|
||||
|
||||
float getBikeSpeedApproxFiltered(float max = 90 / 3.6f) {
|
||||
float speed = getBikeSpeedApprox();
|
||||
if (speed < max)
|
||||
filteredSpeed = speed;
|
||||
return filteredSpeed;
|
||||
}
|
||||
|
||||
float getBikeSpeedApprox() {
|
||||
float newTimeDlt = Time.time - lastTimeImp;
|
||||
|
||||
if (lastTimeDlt < 0.01)
|
||||
return 0f;
|
||||
if (newTimeDlt < lastTimeDlt)
|
||||
return distancePerTick / lastTimeDlt;
|
||||
if (newTimeDlt < maxTimeDlt)
|
||||
return distancePerTick / newTimeDlt;
|
||||
return 0f;
|
||||
}
|
||||
|
||||
float getBikeSpeedLegacy(float timeWindow = .5f) {
|
||||
int imp = getBikeImpulses(timeWindow);
|
||||
return imp * distancePerTick / timeWindow;
|
||||
}
|
||||
|
||||
void WheelTic() {
|
||||
impulses.Enqueue(Time.time);
|
||||
distanceRun += distancePerTick;
|
||||
//Debug.Log(GetProgress());
|
||||
|
||||
lastTimeDlt = Time.time - lastTimeImp;
|
||||
lastTimeImp = Time.time;
|
||||
|
||||
Debug.Log(lastTimeDlt);
|
||||
}
|
||||
// int getBikeImpulses(float timeWindow = .5f) {
|
||||
// if (impulses.Count == 0) {
|
||||
// return 0;
|
||||
// }
|
||||
//
|
||||
// float time = Time.time;
|
||||
// float delta = time - impulses.Peek();
|
||||
// while (delta > timeWindow) {
|
||||
// impulses.Dequeue();
|
||||
// if (impulses.Count == 0) {
|
||||
// break;
|
||||
// }
|
||||
// delta = time - impulses.Peek();
|
||||
// }
|
||||
// return impulses.Count;
|
||||
// }
|
||||
//
|
||||
// float getBikeSpeedApproxFiltered(float max = 90 / 3.6f) {
|
||||
// float speed = getBikeSpeedApprox();
|
||||
// if (speed < max)
|
||||
// filteredSpeed = speed;
|
||||
// return filteredSpeed;
|
||||
// }
|
||||
//
|
||||
// float getBikeSpeedApprox() {
|
||||
// float newTimeDlt = Time.time - lastTimeImp;
|
||||
//
|
||||
// if (lastTimeDlt < 0.01)
|
||||
// return 0f;
|
||||
// if (newTimeDlt < lastTimeDlt)
|
||||
// return distancePerTick / lastTimeDlt;
|
||||
// if (newTimeDlt < maxTimeDlt)
|
||||
// return distancePerTick / newTimeDlt;
|
||||
// return 0f;
|
||||
// }
|
||||
//
|
||||
// float getBikeSpeedLegacy(float timeWindow = .5f) {
|
||||
// int imp = getBikeImpulses(timeWindow);
|
||||
// return imp * distancePerTick / timeWindow;
|
||||
// }
|
||||
//
|
||||
// void WheelTic() {
|
||||
// impulses.Enqueue(Time.time);
|
||||
// distanceRun += distancePerTick;
|
||||
// //Debug.Log(GetProgress());
|
||||
//
|
||||
// lastTimeDlt = Time.time - lastTimeImp;
|
||||
// lastTimeImp = Time.time;
|
||||
//
|
||||
// Debug.Log(lastTimeDlt);
|
||||
// }
|
||||
|
||||
public float GetProgress() {
|
||||
return distanceRun / distanceToRun;
|
||||
return taco.GetDistanceRun() / distanceToRun;
|
||||
}
|
||||
|
||||
public float GetDistance() {
|
||||
return distanceRun;
|
||||
return taco.GetDistanceRun();
|
||||
}
|
||||
}
|
||||
|
@ -10,6 +10,7 @@ public class ConfigurationLoader {
|
||||
public float distance;
|
||||
public float normalTime;
|
||||
public float[] diameters = new float[2];
|
||||
public int[] sensors = new int[2];
|
||||
|
||||
public ConfigurationLoader() {
|
||||
Load();
|
||||
@ -24,6 +25,8 @@ public class ConfigurationLoader {
|
||||
normalTime = obj["Course"]["TempsNormal"].n;
|
||||
diameters[0] = obj["Vélos"]["Joueur1"]["DiamètreRoue"].n / 1000f;
|
||||
diameters[1] = obj["Vélos"]["Joueur2"]["DiamètreRoue"].n / 1000f;
|
||||
sensors[0] = (int) obj["Vélos"]["Joueur1"]["NombreDeCapteurs"].n;
|
||||
sensors[1] = (int) obj["Vélos"]["Joueur2"]["NombreDeCapteurs"].n;
|
||||
}
|
||||
|
||||
private void Check() {
|
||||
|
@ -69,4 +69,8 @@ public class GameManager : MonoBehaviour {
|
||||
public float GetBikeWheelDiameter(int bikeID) {
|
||||
return conf.diameters[bikeID];
|
||||
}
|
||||
|
||||
public int GetSensorsCount(int bikeID) {
|
||||
return conf.sensors[bikeID];
|
||||
}
|
||||
}
|
||||
|
16
Assets/Scripts/GameScene/RAWTachometer.cs
Normal file
16
Assets/Scripts/GameScene/RAWTachometer.cs
Normal file
@ -0,0 +1,16 @@
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
using System.Linq;
|
||||
|
||||
public class RAWTachometer : Tachometer {
|
||||
|
||||
public float delta = 1f;
|
||||
|
||||
public override float GetSpeed() {
|
||||
int c = impulses.Count(i => i > Time.time - delta);
|
||||
Debug.Log("I ru speed Count: " + impulses.Count() + " c " + c);
|
||||
return c;
|
||||
}
|
||||
|
||||
}
|
13
Assets/Scripts/GameScene/RAWTachometer.cs.meta
Normal file
13
Assets/Scripts/GameScene/RAWTachometer.cs.meta
Normal file
@ -0,0 +1,13 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 00df707dfe3734d81bfa5bec6c30526f
|
||||
timeCreated: 1520974537
|
||||
licenseType: Free
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
54
Assets/Scripts/GameScene/Tachometer.cs
Normal file
54
Assets/Scripts/GameScene/Tachometer.cs
Normal file
@ -0,0 +1,54 @@
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
using System.Linq;
|
||||
|
||||
public abstract class Tachometer : MonoBehaviour {
|
||||
|
||||
private string inputID;
|
||||
|
||||
// Config
|
||||
private float ticPerTurn;
|
||||
private float wheelDiameter;
|
||||
|
||||
// Process
|
||||
private float distancePerTick;
|
||||
|
||||
|
||||
protected List<float> impulses = new List<float>();
|
||||
|
||||
public void SetPlayer(int playerID) {
|
||||
inputID = "WheelP" + (playerID + 1);
|
||||
|
||||
LoadConfig(playerID);
|
||||
}
|
||||
|
||||
private void LoadConfig(int playerID) {
|
||||
var gm = GameManager.Instance;
|
||||
ticPerTurn = gm.GetSensorsCount(playerID);
|
||||
wheelDiameter = gm.GetBikeWheelDiameter(playerID);
|
||||
|
||||
distancePerTick = wheelDiameter * Mathf.PI / ticPerTurn;
|
||||
}
|
||||
|
||||
private void RegisterTic() {
|
||||
Debug.Log("Register");
|
||||
impulses.Add(Time.time);
|
||||
}
|
||||
|
||||
public virtual float GetSpeed() {
|
||||
return -1f;
|
||||
}
|
||||
|
||||
public float GetDistanceRun() {
|
||||
return distancePerTick * impulses.Count();
|
||||
}
|
||||
|
||||
void Start() {
|
||||
}
|
||||
|
||||
void Update() {
|
||||
if (Input.GetButtonDown(inputID))
|
||||
RegisterTic();
|
||||
}
|
||||
}
|
13
Assets/Scripts/GameScene/Tachometer.cs.meta
Normal file
13
Assets/Scripts/GameScene/Tachometer.cs.meta
Normal file
@ -0,0 +1,13 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 02a8f1d343fd64322a2ef2e772360ef3
|
||||
timeCreated: 1520973602
|
||||
licenseType: Free
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
Loading…
Reference in New Issue
Block a user