mirror of
https://github.com/sam-astro/Z-Sharp.git
synced 2025-12-11 16:22:12 +00:00
Graphics working, and started pong game
This commit is contained in:
parent
b3ac3ce18f
commit
3e6c84add6
@ -58,7 +58,7 @@ bool IsVar(const string& varName, const unordered_map<string, boost::any>& varia
|
||||
return false;
|
||||
}
|
||||
|
||||
vector<boost::any> VarValues(const vector<string>& varNames, const unordered_map<string, boost::any>& variableValues)
|
||||
vector<boost::any> VarValues(const vector<string>& varNames, unordered_map<string, boost::any>& variableValues)
|
||||
{
|
||||
vector<boost::any> realValues;
|
||||
|
||||
@ -66,7 +66,8 @@ vector<boost::any> VarValues(const vector<string>& varNames, const unordered_map
|
||||
{
|
||||
string varName = trim(varNames[varIndex]);
|
||||
|
||||
auto iA = variableValues.find(varName);
|
||||
realValues.push_back(EvalExpression(varName, variableValues));
|
||||
/*auto iA = variableValues.find(varName);
|
||||
if (iA != variableValues.end())
|
||||
{
|
||||
realValues.push_back(iA->second);
|
||||
@ -78,7 +79,7 @@ vector<boost::any> VarValues(const vector<string>& varNames, const unordered_map
|
||||
realValues.push_back(iB->second);
|
||||
else
|
||||
realValues.push_back(varName);
|
||||
}
|
||||
}*/
|
||||
}
|
||||
|
||||
return realValues;
|
||||
@ -267,34 +268,14 @@ int varOperation(const vector<string>& str, unordered_map<string, boost::any>& v
|
||||
{
|
||||
if (IsVar(split(str[0], '.')[0], variableValues))
|
||||
{
|
||||
if (str[1] == "=")
|
||||
EditClassSubComponent(variableValues[split(str[0], '.')[0]], str[1], EvalExpression(unWrapVec(vector<string>(str.begin() + 2, str.end())), variableValues), split(str[0], '.')[1]);
|
||||
else if (str[1] == "+=")
|
||||
EditClassSubComponent(variableValues[split(str[0], '.')[0]], str[1], EvalExpression(unWrapVec(vector<string>(str.begin() + 2, str.end())), variableValues), split(str[0], '.')[1]);
|
||||
else if (str[1] == "-=")
|
||||
EditClassSubComponent(variableValues[split(str[0], '.')[0]], str[1], EvalExpression(unWrapVec(vector<string>(str.begin() + 2, str.end())), variableValues), split(str[0], '.')[1]);
|
||||
else if (str[1] == "*=")
|
||||
EditClassSubComponent(variableValues[split(str[0], '.')[0]], str[1], EvalExpression(unWrapVec(vector<string>(str.begin() + 2, str.end())), variableValues), split(str[0], '.')[1]);
|
||||
else if (str[1] == "/=")
|
||||
EditClassSubComponent(variableValues[split(str[0], '.')[0]], str[1], EvalExpression(unWrapVec(vector<string>(str.begin() + 2, str.end())), variableValues), split(str[0], '.')[1]);
|
||||
else
|
||||
LogWarning("unrecognized operator \'" + str[1] + "\'");
|
||||
//InterpreterLog(unWrapVec(vector<string>(str.begin() + 2, str.end())));
|
||||
variableValues[split(str[0], '.')[0]] = EditClassSubComponent(variableValues[split(str[0], '.')[0]], str[1], EvalExpression(unWrapVec(vector<string>(str.begin() + 2, str.end())), variableValues), split(str[0], '.')[1]);
|
||||
return 0;
|
||||
}
|
||||
else if (IsVar(split(str[0], '.')[0], globalVariableValues))
|
||||
{
|
||||
if (str[1] == "=")
|
||||
EditClassSubComponent(globalVariableValues[split(str[0], '.')[0]], str[1], EvalExpression(unWrapVec(vector<string>(str.begin() + 2, str.end())), variableValues), split(str[0], '.')[1]);
|
||||
else if (str[1] == "+=")
|
||||
EditClassSubComponent(globalVariableValues[split(str[0], '.')[0]], str[1], EvalExpression(unWrapVec(vector<string>(str.begin() + 2, str.end())), variableValues), split(str[0], '.')[1]);
|
||||
else if (str[1] == "-=")
|
||||
EditClassSubComponent(globalVariableValues[split(str[0], '.')[0]], str[1], EvalExpression(unWrapVec(vector<string>(str.begin() + 2, str.end())), variableValues), split(str[0], '.')[1]);
|
||||
else if (str[1] == "*=")
|
||||
EditClassSubComponent(globalVariableValues[split(str[0], '.')[0]], str[1], EvalExpression(unWrapVec(vector<string>(str.begin() + 2, str.end())), variableValues), split(str[0], '.')[1]);
|
||||
else if (str[1] == "/=")
|
||||
EditClassSubComponent(globalVariableValues[split(str[0], '.')[0]], str[1], EvalExpression(unWrapVec(vector<string>(str.begin() + 2, str.end())), variableValues), split(str[0], '.')[1]);
|
||||
else
|
||||
LogWarning("unrecognized operator \'" + str[1] + "\'");
|
||||
//InterpreterLog(unWrapVec(vector<string>(str.begin() + 2, str.end())));
|
||||
globalVariableValues[split(str[0], '.')[0]] = EditClassSubComponent(globalVariableValues[split(str[0], '.')[0]], str[1], EvalExpression(unWrapVec(vector<string>(str.begin() + 2, str.end())), variableValues), split(str[0], '.')[1]);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
@ -30,6 +30,18 @@ public:
|
||||
|
||||
boost::any nullType;
|
||||
|
||||
float clamp(float v, float min, float max)
|
||||
{
|
||||
if (v < min) return min;
|
||||
if (v > max) return max;
|
||||
return v;
|
||||
}
|
||||
|
||||
float lerp(float a, float b, float f)
|
||||
{
|
||||
return a + f * (b - a);
|
||||
}
|
||||
|
||||
int LogWarning(const string& warningText)
|
||||
{
|
||||
cerr << "\x1B[33mWARNING: " << warningText << "\033[0m\t\t" << endl;
|
||||
@ -203,6 +215,8 @@ boost::any CPPFunction(const string& name, const vector<boost::any>& args)
|
||||
return tan(AnyAsFloat(args[0]));
|
||||
else if (name == "CPP.Math.Round")
|
||||
return AnyAsInt(args[0]);
|
||||
else if (name == "CPP.Math.Lerp")
|
||||
return lerp(AnyAsFloat(args[0]), AnyAsFloat(args[1]), AnyAsFloat(args[2]));
|
||||
else if (name == "CPP.Graphics.Init")
|
||||
{
|
||||
InterpreterLog("Init graphics");
|
||||
|
||||
@ -45,6 +45,13 @@ func Round(input)
|
||||
return out
|
||||
}
|
||||
|
||||
// Linearly interpolates between a and b by t
|
||||
func Lerp(a, b, t)
|
||||
{
|
||||
float out = CPP.Math.Lerp(a, b, t)
|
||||
return out
|
||||
}
|
||||
|
||||
// Clamps input between min and max
|
||||
func Clamp(input, min, max)
|
||||
{
|
||||
@ -102,6 +109,5 @@ func NVec2(x, y)
|
||||
func GetKey(keyName)
|
||||
{
|
||||
bool b = CPP.Input.GetKey(keyName)
|
||||
print b
|
||||
return b
|
||||
}
|
||||
|
||||
@ -19,8 +19,10 @@
|
||||
#include <SDL_ttf.h>
|
||||
#include <SDL_image.h>
|
||||
#include <string>
|
||||
#include <any>
|
||||
|
||||
using namespace std;
|
||||
using namespace boost;
|
||||
|
||||
int WINDOW_WIDTH = 1280;
|
||||
int WINDOW_HEIGHT = 720;
|
||||
@ -212,7 +214,7 @@ public:
|
||||
return y;
|
||||
}
|
||||
|
||||
int EditSubComponent(std::string componentName, std::string oper, boost::any otherVal)
|
||||
Vec2 EditSubComponent(std::string componentName, std::string oper, boost::any otherVal)
|
||||
{
|
||||
if (componentName == "x")
|
||||
{
|
||||
@ -240,6 +242,7 @@ public:
|
||||
else if (oper == "/=")
|
||||
y /= AnyAsFloat(otherVal);
|
||||
}
|
||||
return *this;
|
||||
}
|
||||
|
||||
float x, y;
|
||||
@ -381,7 +384,7 @@ public:
|
||||
return position.y;
|
||||
}
|
||||
|
||||
int EditSubComponent(std::string componentName, std::string oper, boost::any otherVal)
|
||||
Sprite EditSubComponent(std::string componentName, std::string oper, boost::any otherVal)
|
||||
{
|
||||
if (componentName == "position")
|
||||
{
|
||||
@ -422,6 +425,7 @@ public:
|
||||
else if (oper == "/=")
|
||||
position.y /= AnyAsFloat(otherVal);
|
||||
}
|
||||
return *this;
|
||||
}
|
||||
|
||||
Vec2 position;
|
||||
@ -706,14 +710,14 @@ int updateLoop()
|
||||
|
||||
SDL_RenderClear(gRenderer);
|
||||
|
||||
ExecuteFunction("Update", vector<boost::any> {});
|
||||
ExecuteFunction("Update", vector<boost::any> {dt});
|
||||
|
||||
// Present the backbuffer
|
||||
SDL_RenderPresent(gRenderer);
|
||||
|
||||
// Calculate frame time
|
||||
auto stopTime = std::chrono::high_resolution_clock::now();
|
||||
dt = std::chrono::duration<float, std::chrono::milliseconds::period>(stopTime - startTime).count();
|
||||
dt = std::chrono::duration<float, std::chrono::milliseconds::period>(stopTime - startTime).count() / 1000.0f;
|
||||
|
||||
}
|
||||
return 0;
|
||||
|
||||
@ -5,5 +5,6 @@
|
||||
using namespace std;
|
||||
|
||||
boost::any ExecuteFunction(const string& functionName, const vector<boost::any>& inputVarVals);
|
||||
boost::any EvalExpression(const string& ex, unordered_map<string, boost::any>& variableValues);
|
||||
|
||||
#endif
|
||||
|
||||
@ -1,9 +1,10 @@
|
||||
int SCREENW = 780
|
||||
int SCREENH = 500
|
||||
int SCREENW = 900
|
||||
int SCREENH = 600
|
||||
|
||||
int scoreOne = 0
|
||||
int scoreTwo = 0
|
||||
Vec2 paddleScale = NVec2(16, 70)
|
||||
|
||||
float paddleMoveSpeed = 200
|
||||
|
||||
func Main(input, in)
|
||||
{
|
||||
@ -22,29 +23,47 @@ func Start()
|
||||
float yPosPaddle = yPosBall - paddleScale.y / 2
|
||||
|
||||
Vec2 lPaddlePosition = NVec2(15, yPosPaddle)
|
||||
global Vec2 lPaddleTargetPosition = NVec2(15, yPosPaddle)
|
||||
|
||||
float rOffset = SCREENW - 15
|
||||
Vec2 rPaddlePosition = NVec2(rOffset, yPosPaddle)
|
||||
global Vec2 rPaddleTargetPosition = NVec2(15, yPosPaddle)
|
||||
|
||||
global Sprite ballSprite = CPP.Graphics.Sprite("./square.png", ballPosition, ballScale, 0)
|
||||
global Sprite lPaddle = CPP.Graphics.Sprite("./square.png", lPaddlePosition, paddleScale, 0)
|
||||
global Sprite rPaddle = CPP.Graphics.Sprite("./square.png", rPaddlePosition, paddleScale, 0)
|
||||
}
|
||||
|
||||
func Update()
|
||||
func Update(deltaTime)
|
||||
{
|
||||
Vec2 as = NVec2(16, 70)
|
||||
print "updating"
|
||||
|
||||
//print deltaTime
|
||||
if GetKey("W") == true
|
||||
{
|
||||
print "W"
|
||||
as.x += 4
|
||||
// lPaddle.position.y += 1
|
||||
float newX = lPaddle.position.x
|
||||
// Subtract from Y to move up, because vertical coordinates are reversed
|
||||
float newY = lPaddleTargetPosition.y - paddleMoveSpeed * deltaTime
|
||||
newY = Clamp(newY, 0, SCREENH - 70)
|
||||
lPaddleTargetPosition = NVec2(newX, newY)
|
||||
}
|
||||
if GetKey("S") == true
|
||||
{
|
||||
float newX = lPaddle.position.x
|
||||
// Add to Y to move down, because vertical coordinates are reversed
|
||||
float newY = lPaddleTargetPosition.y + paddleMoveSpeed * deltaTime
|
||||
newY = Clamp(newY, 0, SCREENH - 70)
|
||||
lPaddleTargetPosition = NVec2(newX, newY)
|
||||
}
|
||||
// Lerps from old position to destination smoothly
|
||||
float oldY = lPaddle.position.y
|
||||
float stopSpeed = deltaTime * 15
|
||||
float newY = lPaddleTargetPosition.y
|
||||
float lerpedY = Lerp(oldY, newY, stopSpeed)
|
||||
print "0 < " + newY + " < " + SCREENH
|
||||
lPaddle.position = NVec2(newX, lerpedY)
|
||||
|
||||
print as.x + " , " + as.y
|
||||
|
||||
|
||||
// Finally draws all of the sprites
|
||||
CPP.Graphics.Draw(ballSprite)
|
||||
CPP.Graphics.Draw(lPaddle)
|
||||
CPP.Graphics.Draw(rPaddle)
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user