Focus controls, and stablity improvments

Many console enhancements!
This commit is contained in:
Ryan 2017-08-28 00:46:03 -04:00
parent 70fa89de8c
commit 8dfb0cb367
7 changed files with 402 additions and 124 deletions

View File

@ -5,7 +5,7 @@ TODO:
- [ ] Add other cool built in things (Fun)
- [ ] Add object support (Tough)
- [ ] Improve audio support (Simple)
- [ ] Add simple threading (Alright)
- [x] Add simple threading (Alright)
- [ ] Fix Bugs! (Death)
Maybe:

86
parseManager/Fancy.cs Normal file
View File

@ -0,0 +1,86 @@
/*
* Created by SharpDevelop.
* User: Ryan
* Date: 8/27/2017
* Time: 8:29 PM
*
* To change this template use Tools | Options | Coding | Edit Standard Headers.
*/
using System;
namespace FancyPrintCS
{
public static class Fancy
{
static char[][] fvars = {
new char[]{ '╚', '═', '╝', '║', '╔', '╗', '╠', '╣', '╩', '╦', '╬' },
new char[]{ '+', '═', '+', '|', '+', '+', '+', '+', '+', '+', '+' },
new char[]{ '└', '─', '┘', '│', '┌', '┐', '├', '┤', '┴', '┬', '┼' },
new char[]{ '+', '~', '+', '|', '+', '+', '+', '+', '+', '+', '+' },
new char[]{ '+', '-', '+', '|', '+', '+', '+', '+', '+', '+', '+' },
new char[]{ '╙', '─', '╜', '║', '╓', '╖', '╟', '╢', '╨', '╥', '╫' },
new char[]{ '╘', '═', '╛', '│', '╒', '╕', '╞', '╡', '╧', '╤', '╪' }
};
static int form = 3;
static int fvar;
public static void SetForm(int n)
{
if (n < 1 || n > 3) {
Console.WriteLine("Invalid int value! Only 1, 2 and 3");
} else {
form = n;
}
}
public static void SetForm(string n)
{
if (n.ToLower()=="left"){
form=2;
} else if(n.ToLower()=="right"){
form=3;
} else if(n.ToLower()=="center"){
form=1;
}
}
public static void Print(string[] msg)
{
int max = 0;
var f = fvars[fvar];
for (int i = 0; i < msg.Length; i++) {
if (msg[i].Length > max) {
max = msg[i].Length + 2;
}
}
Console.WriteLine(f[4] + new String(f[1], max) + f[5]);
string space1 = "";
string space2 = "";
for (int i = 0; i < msg.Length; i++) {
if (form == 1) { // CENTER
if ((max - 2) != msg[i].Length) {
space1 = new String(' ', (max - msg[i].Length) / 2 + ((max - msg[i].Length) % 2));
space2 = new String(' ', ((max - msg[i].Length) / 2));
} else {
space1 = new String(' ', (max - msg[i].Length) / 2 + ((max - msg[i].Length) % 2));
space2 = new String(' ', ((max - msg[i].Length) / 2));
}
} else if (form == 2) { // LEFT
space1 = "";
space2 = new String(' ', max - msg[i].Length);
} else if (form == 3) { // RIGHT
space2 = "";
space1 = new String(' ', max - msg[i].Length);
}
if (msg[i] == "/l") {
Console.WriteLine(f[6] + new String(f[1], max) + f[7]);
} else {
Console.WriteLine(f[3] + space1 + msg[i] + space2 + f[3]);
}
}
Console.WriteLine(f[0] + new String(f[1], max) + f[2]);
}
public static void Print(string msg)
{
var msgArr = msg.Split(',');
Fancy.Print(msgArr);
}
}
}

View File

@ -7,79 +7,161 @@
* To change this template use Tools | Options | Coding | Edit Standard Headers.
*/
using System;
using System.Threading;
using CSCore;
using CSCore.Codecs;
using CSCore.SoundOut;
using System.Diagnostics;
using System.Runtime.InteropServices;
using parseManagerCS;
using System.Windows.Input;
public class define : standardDefine // If you want the standard methods you must include this, Also this class cannot be static!
{
double count;
ISoundOut GetSoundOut()
int origRow = Console.CursorTop;
int origCol = Console.CursorLeft;
public void setPosition(parseManager PM, double x, double y)
{
if (WasapiOut.IsSupportedOnCurrentPlatform)
return new WasapiOut();
else
return new DirectSoundOut();
Console.SetCursorPosition((int)x, (int)y);
}
IWaveSource GetSoundSource(string path)
public void writeAt(parseManager PM, string s, double x, double y)
{
return CodecFactory.Instance.GetCodec(path);
try {
Console.SetCursorPosition(origCol + (int)x, origRow + (int)y);
Console.Write(s);
} catch (ArgumentOutOfRangeException e) {
Console.Clear();
Console.WriteLine(e.Message);
}
public void _play()
}
public bool isDown(parseManager PM, string key)
{
string path = (string)GLOBALS.GetData("__MUSIC");
double id = (double)GLOBALS.GetData("__MUSICH");
using (IWaveSource soundSource = GetSoundSource(path)) {
using (ISoundOut soundOut = GetSoundOut()) {
soundOut.Initialize(soundSource);
GLOBALS.AddData("__MUSICH" + id, soundOut);
soundOut.Play();
soundOut.WaitForStopped();
if(!ApplicationIsActivated()){
return false;
}
Key kk = Key.Zoom;
var k = key.ToUpper();
if (k == "A") {
kk = Key.A;
} else if (k == "B") {
kk = Key.B;
} else if (k == "C") {
kk = Key.C;
} else if (k == "D") {
kk = Key.D;
} else if (k == "E") {
kk = Key.E;
} else if (k == "F") {
kk = Key.F;
} else if (k == "G") {
kk = Key.G;
} else if (k == "H") {
kk = Key.H;
} else if (k == "I") {
kk = Key.I;
} else if (k == "J") {
kk = Key.J;
} else if (k == "K") {
kk = Key.K;
} else if (k == "L") {
kk = Key.L;
} else if (k == "M") {
kk = Key.M;
} else if (k == "N") {
kk = Key.N;
} else if (k == "O") {
kk = Key.O;
} else if (k == "P") {
kk = Key.P;
} else if (k == "Q") {
kk = Key.Q;
} else if (k == "R") {
kk = Key.R;
} else if (k == "S") {
kk = Key.S;
} else if (k == "T") {
kk = Key.T;
} else if (k == "U") {
kk = Key.U;
} else if (k == "V") {
kk = Key.V;
} else if (k == "W") {
kk = Key.W;
} else if (k == "X") {
kk = Key.X;
} else if (k == "Y") {
kk = Key.Y;
} else if (k == "Z") {
kk = Key.Z;
} else if (k == "{UP}") {
kk = Key.Up;
} else if (k == "{DOWN}") {
kk = Key.Down;
} else if (k == "{LEFT}") {
kk = Key.Left;
} else if (k == "{RIGHT}") {
kk = Key.Right;
} else if (k == "{ENTER}") {
kk = Key.Enter;
} else if (k == "{LSHIFT}"){
kk = Key.LeftShift;
} else if (k == "{RSHIFT}"){
kk = Key.RightShift;
} else if (k == "0"){
kk = Key.D0;
} else if (k == "1"){
kk = Key.D1;
} else if (k == "2"){
kk = Key.D2;
} else if (k == "3"){
kk = Key.D3;
} else if (k == "4"){
kk = Key.D4;
} else if (k == "5"){
kk = Key.D5;
} else if (k == "6"){
kk = Key.D6;
} else if (k == "7"){
kk = Key.D7;
} else if (k == "8"){
kk = Key.D8;
} else if (k == "9"){
kk = Key.D9;
} else if(k == "{SPACE}"){
kk = Key.Space;
}
return Keyboard.IsKeyDown(kk);
}
public void STOP(parseManager PM, double id)
public string isPressing(parseManager PM)
{
var sound = (ISoundOut)GLOBALS.GetData("__MUSICH" + id);
sound.Stop();
return Console.ReadKey(true).Key.ToString();
}
public void RESUME(parseManager PM, double id)
public static bool ApplicationIsActivated()
{
var sound = (ISoundOut)GLOBALS.GetData("__MUSICH" + id);
sound.Resume();
var activatedHandle = GetForegroundWindow();
if (activatedHandle == IntPtr.Zero) {
return false; // No window is currently activated
} else {
var procId = Process.GetCurrentProcess().Id;
int activeProcId;
GetWindowThreadProcessId(activatedHandle, out activeProcId);
return activeProcId == procId;
}
public void SETV(parseManager PM, double id, double vol)
{
var sound = (ISoundOut)GLOBALS.GetData("__MUSICH" + id);
sound.Volume = (float)vol;
}
public void PAUSE(parseManager PM, double id)
{
var sound = (ISoundOut)GLOBALS.GetData("__MUSICH" + id);
sound.Pause();
}
public double PLAY(parseManager PM, string filepath)
{
GLOBALS.AddData("__MUSIC", filepath);
GLOBALS.AddData("__MUSICH", count++);
var oThread = new Thread(new ThreadStart(_play));
oThread.Start();
return count - 1;
}
[DllImport("user32.dll", CharSet = CharSet.Auto, ExactSpelling = true)]
static extern IntPtr GetForegroundWindow();
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
static extern int GetWindowThreadProcessId(IntPtr handle, out int processId);
}
namespace parseManagerCS
{
class Program
{
[STAThread]
public static void Main(string[] args)
{
if (args.Length == 0) {
Console.Write("Please Include a file path!");
Console.ReadLine();
Environment.Exit(0);
}
parseManager PM = new parseManager(args[0], "define");
// if (args.Length == 0) {
// Console.Write("Please Include a file path!");
// Console.ReadLine();
// Environment.Exit(0);
// }
parseManager PM = new parseManager("parsetest2.txt", "define");
nextType next = PM.Next();
string type;
while (next.GetCMDType() != "EOF") {

View File

@ -1,13 +1,48 @@
ENTRY START
[START]{
"Hello"
song=PLAY("test.flac")
print("Hello!")
"Don't hit enter!"
"Am I still going?"
PAUSE(song)
"I'm alive!"
"Lets resume"
RESUME(song)
":)"
ENTRY STARTHERE
[STARTHERE]{
write("Name: ")
name=getInput()
clear()
if name=="" then SKIP(-4)|SKIP(0)
PAUSE("So your name is $name$, thats cool!")
pos=1
::loop::
clear()
setFG(Color_Blue)
fancy("left"," What to do $name$?,/l, Play Game, View Stats, View Credits, Quit Game")
keyUP=isDown("{UP}")
keyDOWN=isDown("{DOWN}")
keyENTER=isDown("{RIGHT}")
if keyUP==true then setVarPlay("pos",pos-1)|SKIP(0)
if keyDOWN==true then setVarPlay("pos",pos+1)|SKIP(0)
if keyENTER==true then GOTO("choicemade")|SKIP(0)
writeAt("->",1,pos+2)
sleep(75)
GOTO("loop")
::choicemade::
if pos==1 then print("You Pressed Play!")|SKIP(0)
if pos==2 then print("You Pressed Stats")|SKIP(0)
if pos==3 then print("You Pressed Credits")|SKIP(0)
if pos==4 then print("You Pressed Quit")|SKIP(0)
PAUSE("Tests done (Press Enter!)")
}
[PAUSE:function(msg)]{
write(msg)
::loop::
keyENTER=isDown("{ENTER}")
if keyENTER==true then SKIP(0)|GOTO("loop")
print(" ")
}
[setVarPlay:function(var,val)]{
setVar(var,val)
if pos<1 then GOTO("toolittle")|SKIP(0)
if pos>4 then GOTO("toomuch")|SKIP(0)
beep()
GOTO("end")
::toolittle::
setVar("pos",1)
GOTO("end")
::toomuch::
setVar("pos",4)
::end::
}

View File

@ -1,29 +1,28 @@
ENTRY TESTSTART
[TESTSTART]{
SetFG(Color_Blue)
write("This is blue ")
SetFG(Color_Red)
print("This is red")
ResetColor()
song=loadSong("test.flac")
setFG(Color_Blue)
"Hello (Press Enter)"
print("PLAY SONG (1)")
print("MESSAGE (2)")
print("An Adventure (3)")
print("QUIT (4)")
-- print("PLAY SONG (1)")
-- print("MESSAGE (2)")
-- print("An Adventure (3)")
-- print("QUIT (4)")
fancy("left","PLAY SONG (1),MESSAGE (2),An Adventure (3),QUIT (4)")
::choice::
write("Choose: ")
choice=GetInput()
choice=getInput()
if choice=="1" then JUMP("SONG")|SKIP(0)
if choice=="2" then JUMP("YO")|SKIP(0)
if choice=="4" then QUIT()|SKIP(0)
if choice=="3" then SKIP(2)|SKIP(0)
GOTO("choice")
"We are here now! Time for some fun..."
::name::
write("Please enter your name: ")
name=GetInput()
setCC()
if name=="" then SKIP(-4)|SKIP(0)
name=getInput()
ClearLine()
setCC()
if name=="" then GOTO("name")|SKIP(0)
print("So your name is $name$ huh...")
"I won't judge haha"
"Anyway let's get controls for that song"
@ -34,11 +33,11 @@ ENTRY TESTSTART
print("Quit (q)")
::control::
write("Choose: ")
choice=GetInput()
choice=getInput()
if choice=="s" then STOP(song)|SKIP(0)
if choice=="t" then JUMP("PLAYS")|SKIP(0)
if choice=="a" then PAUSE(song)|SKIP(0)
if choice=="r" then RESUME(song)|SKIP(0)
if choice=="a" then pauseSong(song)|SKIP(0)
if choice=="r" then resumeSong(song)|SKIP(0)
if choice=="q" then QUIT()|SKIP(0)
GOTO("control")
}
@ -47,12 +46,13 @@ ENTRY TESTSTART
setCC()
}
[PLAYS]{
PAUSE(song)
song=PLAY("test.flac")
pauseSong(song)
song=loadSong("test.flac")
playSong(song)
GOTO("control")
}
[SONG]{
song=PLAY("test.flac")
playSong(song)
GOTO("choice")
}
[YO]{

View File

@ -6,10 +6,15 @@
using System;
using System.IO;
using System.Collections.Generic;
using System.Runtime.InteropServices;
using System.Text.RegularExpressions;
using System.Reflection;
using CSCore;
using CSCore.Codecs;
using CSCore.SoundOut;
using parseManagerCS;
using System.Threading;
using FancyPrintCS;
namespace parseManagerCS
{
/// The parseManager is an Advance Config Script
@ -156,7 +161,8 @@ namespace parseManagerCS
// foreach (Match m in Regex.Matches(data, @"USING ([a-zA-Z0-9_\./]+)")) {
// m.Groups[1].ToString();
// }
var match = Regex.Matches(data, @"\[(.+)\][\r\n]*?\{([^\0]+?)\}");
data = data + "\n";
var match = Regex.Matches(data, "\\[(.+)\\][\r\n]*?\\{([^\0]+?)\\}\r?\n");
var count = 0;
foreach (Match m in match) {
string Blck = m.Groups[1].ToString();
@ -307,6 +313,9 @@ namespace parseManagerCS
}
public ENV GetENV()
{
if (_defualtENV == null) {
return _mainENV;
}
return _defualtENV;
}
public ENV GetDENV()
@ -535,7 +544,7 @@ namespace parseManagerCS
bool boo;
double ex;
for (int i = 0; i < len; i++) {
if (!v[i].StartsWith("["))
if (!v[i].StartsWith("[") && !v[i].StartsWith("\""))
ex = evaluater.Evaluate(v[i]);
else
ex = double.NaN;
@ -671,9 +680,9 @@ namespace parseManagerCS
var m = Regex.Match(_type, @"([a-zA-Z0-9_]+)");
_pureType = m.Groups[1].ToString();
var tCont = Regex.Replace(cont, @"\-\-\[\[[\S\s]+\]\]", "", RegexOptions.Multiline);
tCont = Regex.Replace(tCont, @"\-\-.+\r\n", "", RegexOptions.Multiline);
tCont = Regex.Replace(tCont, @"\-\-.+\n", "", RegexOptions.Multiline);
tCont = Regex.Replace(tCont, @"\t", "", RegexOptions.Multiline);
tCont = Regex.Replace(tCont, @"^\-\-.+\r\n", "", RegexOptions.Multiline);
tCont = Regex.Replace(tCont, @"^\-\-.+\n", "", RegexOptions.Multiline);
tCont = Regex.Replace(tCont, @"\n\n", "", RegexOptions.Multiline);
tCont = Regex.Replace(tCont, @"\r\n\r\n", "", RegexOptions.Multiline);
tCont = Regex.Replace(tCont, @"\-\-\[\[[\S\s]+\]\]", "", RegexOptions.Multiline);
@ -1206,6 +1215,7 @@ namespace parseManagerCS
}
public class standardDefine
{
double count;
Random rnd = new Random();
public void newThread(parseManager PM, string Block)
{
@ -1248,10 +1258,6 @@ public class standardDefine
env["__DefualtENV"] = PM.GetENV();
GLOBALS.WriteToBinaryFile("savedata.dat", env);
}
public void save(parseManager PM)
{
SAVE(PM);
}
public bool LOAD(parseManager PM)
{
try {
@ -1268,49 +1274,41 @@ public class standardDefine
return false;
}
}
public void load(parseManager PM)
{
LOAD(PM);
}
public void TRACEBACK(parseManager PM)
{
ENV env = PM.Pop();
PM.SetBlock((string)env[0]);
var c = PM.GetCurrentChunk();
c.SetPos((int)env[1]);
SetENV(PM, (ENV)env[3]);
setENV(PM, (ENV)env[3]);
}
public void EXIT(parseManager PM)
{
PM.Deactivate();
}
public void exit(parseManager PM)
{
EXIT(PM);
}
public void QUIT(parseManager PM)
{
Environment.Exit(0);
}
public void SetENV(parseManager PM, ENV env)
public void setENV(parseManager PM, ENV env)
{
PM.SetENV(env);
}
public ENV GetENV(parseManager PM)
public ENV getENV(parseManager PM)
{
return PM.GetENV();
}
public ENV GetDefualtENV(parseManager PM)
public ENV getDefualtENV(parseManager PM)
{
return PM.GetDENV();
}
public ENV CreateENV(parseManager PM)
public ENV createENV(parseManager PM)
{
var temp = new ENV();
temp.SetParent(PM.GetENV());
return temp;
}
public string GetInput(parseManager PM)
public string getInput(parseManager PM)
{
return Console.ReadLine();
}
@ -1324,15 +1322,15 @@ public class standardDefine
Console.Write(" ");
}
}
public void SetBG(parseManager PM, ConsoleColor BG)
public void setBG(parseManager PM, ConsoleColor BG)
{
Console.BackgroundColor = BG;
}
public void SetFG(parseManager PM, ConsoleColor FG)
public void setFG(parseManager PM, ConsoleColor FG)
{
Console.ForegroundColor = FG;
}
public void ResetColor(parseManager PM)
public void resetColor(parseManager PM)
{
Console.ResetColor();
}
@ -1356,7 +1354,7 @@ public class standardDefine
PM.PushError("Unable to GOTO a non existing label: " + label + "!");
return 0;
}
public double LEN(parseManager PM, object o)
public double len(parseManager PM, object o)
{
string type = o.GetType().ToString();
if (type.Contains("String")) {
@ -1367,30 +1365,18 @@ public class standardDefine
}
return 0;
}
public double len(parseManager PM, object o)
{
return LEN(PM, o);
}
public void JUMP(parseManager PM, string block)
{
var c = PM.GetCurrentChunk();
c.ResetPos();
PM.SetBlock(block);
}
public void jump(parseManager PM, string block)
{
JUMP(PM, block);
}
public void SKIP(parseManager PM, double n)
{
var c = PM.GetCurrentChunk();
var pos = c.GetPos();
c.SetPos(pos + (int)n);
}
public void skip(parseManager PM, double n)
{
SKIP(PM, n);
}
public double tonumber(parseManager PM, string strn)
{
double d;
@ -1402,8 +1388,12 @@ public class standardDefine
}
public void sleep(parseManager PM, double n)
{
int i = (int)n * 1000;
Thread.Sleep(i);
Thread.Sleep((int)n);
}
public void setVar(parseManager PM, string var, object value)
{
var env = PM.GetDENV();
env[var] = value;
}
public double ADD(parseManager PM, double a, double b)
{
@ -1449,8 +1439,83 @@ public class standardDefine
{
return Math.Round(num, (int)n);
}
public void clear(parseManager PM)
{
Console.Clear();
}
public void write(parseManager PM, object o)
{
Console.Write(o);
}
public void backspace(parseManager PM)
{
Console.Write("\b");
}
public void beep(parseManager PM)
{
Console.Beep();
}
public void fancy(parseManager PM, string form, string msg)
{
Fancy.SetForm(form);
Fancy.Print(msg);
}
ISoundOut GetSoundOut()
{
if (WasapiOut.IsSupportedOnCurrentPlatform)
return new WasapiOut();
else
return new DirectSoundOut();
}
IWaveSource GetSoundSource(string path)
{
return CodecFactory.Instance.GetCodec(path);
}
public void _load()
{
string path = (string)GLOBALS.GetData("__MUSIC");
double id = (double)GLOBALS.GetData("__MUSICH");
using (IWaveSource soundSource = GetSoundSource(path)) {
using (ISoundOut soundOut = GetSoundOut()) {
soundOut.Initialize(soundSource);
GLOBALS.AddData("__MUSICH" + id, soundOut);
while (true) {
Thread.Sleep(100);
}
}
}
}
public void stopSong(parseManager PM, double id)
{
var sound = (ISoundOut)GLOBALS.GetData("__MUSICH" + id);
sound.Stop();
}
public void playSong(parseManager PM, double id)
{
var sound = (ISoundOut)GLOBALS.GetData("__MUSICH" + id);
sound.Play();
}
public void resumeSong(parseManager PM, double id)
{
var sound = (ISoundOut)GLOBALS.GetData("__MUSICH" + id);
sound.Resume();
}
public void setSongVolume(parseManager PM, double id, double vol)
{
var sound = (ISoundOut)GLOBALS.GetData("__MUSICH" + id);
sound.Volume = (float)vol;
}
public void pauseSong(parseManager PM, double id)
{
var sound = (ISoundOut)GLOBALS.GetData("__MUSICH" + id);
sound.Pause();
}
public double loadSong(parseManager PM, string filepath)
{
GLOBALS.AddData("__MUSIC", filepath);
GLOBALS.AddData("__MUSICH", count++);
var oThread = new Thread(new ThreadStart(_load));
oThread.Start();
return count - 1;
}
}

View File

@ -37,6 +37,9 @@
<Reference Include="Microsoft.CSharp">
<RequiredTargetFramework>4.0</RequiredTargetFramework>
</Reference>
<Reference Include="PresentationCore">
<RequiredTargetFramework>3.0</RequiredTargetFramework>
</Reference>
<Reference Include="System" />
<Reference Include="System.Core">
<RequiredTargetFramework>3.5</RequiredTargetFramework>
@ -45,12 +48,19 @@
<Reference Include="System.Data.DataSetExtensions">
<RequiredTargetFramework>3.5</RequiredTargetFramework>
</Reference>
<Reference Include="System.Windows.Presentation">
<RequiredTargetFramework>3.5</RequiredTargetFramework>
</Reference>
<Reference Include="System.Xml" />
<Reference Include="System.Xml.Linq">
<RequiredTargetFramework>3.5</RequiredTargetFramework>
</Reference>
<Reference Include="WindowsBase">
<RequiredTargetFramework>3.0</RequiredTargetFramework>
</Reference>
</ItemGroup>
<ItemGroup>
<Compile Include="Fancy.cs" />
<Compile Include="parseManager.cs" />
<Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />