KinPortal/Game/DrawPortalStrategy.cs
2020-05-15 12:18:51 +02:00

59 lines
2.0 KiB
C#
Executable File

using System;
using System.Collections.Generic;
using Microsoft.Xna.Framework;
namespace KinPortal {
public class DrawPortalStrategy : TargetingStrategy {
private TimeSpan m_leftLoadTime;
private TimeSpan m_rightLoadTime;
private bool m_leftActive = false;
private HandsProjection m_leftProj;
private bool m_rightActive = false;
private HandsProjection m_rightProj;
public void Update(DynamicObject obj, GameTime gameTime) {
KinPortal.Game game = (KinPortal.Game) obj.Game;
if(m_leftActive && game.HandsTracker.LeftHand.IsClosed) {
m_leftLoadTime += gameTime.ElapsedGameTime;
if(m_leftLoadTime.Milliseconds >= 300.0) {
obj.Scene.PortalManager.CreatePortal(m_leftProj.HitPoint + (m_leftProj.HitNormal * 0.01f), Geometry.GetRelativeRotation(Vector3.Right, m_leftProj.HitNormal), PortalManager.PortalType.RED);
m_leftActive = false;
}
} else {
m_leftActive = false;
}
if(m_rightActive && game.HandsTracker.RightHand.IsClosed) {
m_rightLoadTime += gameTime.ElapsedGameTime;
if(m_rightLoadTime.Milliseconds >= 300.0) {
obj.Scene.PortalManager.CreatePortal(m_rightProj.HitPoint + (m_rightProj.HitNormal * 0.01f), Geometry.GetRelativeRotation(Vector3.Right, m_rightProj.HitNormal), PortalManager.PortalType.BLUE);
m_rightActive = false;
}
} else {
m_rightActive = false;
}
}
public void Target(DynamicObject obj, HandsProjection leftHand, HandsProjection rightHand) {
KinPortal.Game game = (KinPortal.Game) obj.Game;
Vector3 orgNormal = Vector3.Right;
if(leftHand.IsProjected && game.HandsTracker.LeftHand.IsClosed == true && game.HandsTracker.LeftHand.PrevIsClosed == false) {
m_leftActive = true;
m_leftProj = leftHand;
m_leftLoadTime = TimeSpan.Zero;
}
if(rightHand.IsProjected && game.HandsTracker.RightHand.IsClosed == true && game.HandsTracker.RightHand.PrevIsClosed == false) {
m_rightActive = true;
m_rightProj = rightHand;
m_rightLoadTime = TimeSpan.Zero;
}
}
}
}