mirror of
https://github.com/sam-astro/Z-Sharp.git
synced 2025-12-11 16:22:12 +00:00
Optimization, graphics and builtin updates, and continued working on pong game in Slang
This commit is contained in:
parent
62005b90b4
commit
71ba1d608e
191
Slang/Main.cpp
191
Slang/Main.cpp
@ -29,7 +29,7 @@ boost::any GetVariableValue(const string& varName, const unordered_map<string, b
|
||||
|
||||
if (count(varName, '.') > 0)
|
||||
{
|
||||
classSubComponent = rangeInStr(varName, indexInStr(varName, '.')+1, -1);
|
||||
classSubComponent = varName.substr(indexInStr(varName, '.')+1, -1);
|
||||
baseName = split(varName, '.')[0];
|
||||
}
|
||||
|
||||
@ -243,7 +243,7 @@ bool BooleanLogic(const string& valA, const string& determinant, const string& v
|
||||
{
|
||||
boost::any valARealValue = EvalExpression(valA, variableValues);
|
||||
boost::any valBRealValue = EvalExpression(valB, variableValues);
|
||||
|
||||
//InterpreterLog(AnyAsString(valARealValue) + " " + determinant + " " + AnyAsString(valBRealValue) + " : " + to_string(AnyAsString(valARealValue) == AnyAsString(valBRealValue)));
|
||||
if (determinant == "==")
|
||||
return AnyAsString(valARealValue) == AnyAsString(valBRealValue);
|
||||
else if (determinant == "!=")
|
||||
@ -264,55 +264,63 @@ bool BooleanLogic(const string& valA, const string& determinant, const string& v
|
||||
|
||||
int varOperation(const vector<string>& str, unordered_map<string, boost::any>& variableValues)
|
||||
{
|
||||
if (count(str[0], '.') > 0)
|
||||
try
|
||||
{
|
||||
if (IsVar(split(str[0], '.')[0], variableValues))
|
||||
if (count(str[0], '.') > 0)
|
||||
{
|
||||
//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]);
|
||||
if (IsVar(split(str[0], '.')[0], variableValues))
|
||||
{
|
||||
//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))
|
||||
{
|
||||
//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;
|
||||
}
|
||||
}
|
||||
else if (IsVar(str[0], variableValues))
|
||||
{
|
||||
if (str[1] == "=")
|
||||
variableValues[str[0]] = EvalExpression(unWrapVec(vector<string>(str.begin() + 2, str.end())), variableValues);
|
||||
else if (str[1] == "+=")
|
||||
variableValues[str[0]] = EvalExpression(str[0] + "+(" + unWrapVec(vector<string>(str.begin() + 2, str.end())) + ")", variableValues);
|
||||
else if (str[1] == "-=")
|
||||
variableValues[str[0]] = AnyAsFloat(variableValues[str[0]]) - AnyAsFloat(EvalExpression(unWrapVec(vector<string>(str.begin() + 2, str.end())), variableValues));
|
||||
else if (str[1] == "*=")
|
||||
variableValues[str[0]] = AnyAsFloat(variableValues[str[0]]) * AnyAsFloat(EvalExpression(unWrapVec(vector<string>(str.begin() + 2, str.end())), variableValues));
|
||||
else if (str[1] == "/=")
|
||||
variableValues[str[0]] = AnyAsFloat(variableValues[str[0]]) / AnyAsFloat(EvalExpression(unWrapVec(vector<string>(str.begin() + 2, str.end())), variableValues));
|
||||
else
|
||||
LogWarning("unrecognized operator \'" + str[1] + "\'");
|
||||
return 0;
|
||||
}
|
||||
else if (IsVar(split(str[0], '.')[0], globalVariableValues))
|
||||
else if (IsVar(str[0], globalVariableValues))
|
||||
{
|
||||
//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]);
|
||||
if (str[1] == "=")
|
||||
globalVariableValues[str[0]] = EvalExpression(unWrapVec(vector<string>(str.begin() + 2, str.end())), variableValues);
|
||||
else if (str[1] == "+=")
|
||||
globalVariableValues[str[0]] = EvalExpression(str[0] + "+(" + unWrapVec(vector<string>(str.begin() + 2, str.end())) + ")", variableValues);
|
||||
else if (str[1] == "-=")
|
||||
globalVariableValues[str[0]] = AnyAsFloat(variableValues[str[0]]) - AnyAsFloat(EvalExpression(unWrapVec(vector<string>(str.begin() + 2, str.end())), variableValues));
|
||||
else if (str[1] == "*=")
|
||||
globalVariableValues[str[0]] = AnyAsFloat(variableValues[str[0]]) * AnyAsFloat(EvalExpression(unWrapVec(vector<string>(str.begin() + 2, str.end())), variableValues));
|
||||
else if (str[1] == "/=")
|
||||
globalVariableValues[str[0]] = AnyAsFloat(variableValues[str[0]]) / AnyAsFloat(EvalExpression(unWrapVec(vector<string>(str.begin() + 2, str.end())), variableValues));
|
||||
else
|
||||
LogWarning("unrecognized operator \'" + str[1] + "\'");
|
||||
return 0;
|
||||
}
|
||||
LogWarning("uninitialized variable or typo in \'" + str[0] + "\'");
|
||||
return 1;
|
||||
}
|
||||
else if (IsVar(str[0], variableValues))
|
||||
catch (const std::exception&)
|
||||
{
|
||||
if (str[1] == "=")
|
||||
variableValues[str[0]] = EvalExpression(unWrapVec(vector<string>(str.begin() + 2, str.end())), variableValues);
|
||||
else if (str[1] == "+=")
|
||||
variableValues[str[0]] = EvalExpression(str[0] + "+(" + unWrapVec(vector<string>(str.begin() + 2, str.end())) + ")", variableValues);
|
||||
else if (str[1] == "-=")
|
||||
variableValues[str[0]] = AnyAsFloat(variableValues[str[0]]) - AnyAsFloat(EvalExpression(unWrapVec(vector<string>(str.begin() + 2, str.end())), variableValues));
|
||||
else if (str[1] == "*=")
|
||||
variableValues[str[0]] = AnyAsFloat(variableValues[str[0]]) * AnyAsFloat(EvalExpression(unWrapVec(vector<string>(str.begin() + 2, str.end())), variableValues));
|
||||
else if (str[1] == "/=")
|
||||
variableValues[str[0]] = AnyAsFloat(variableValues[str[0]]) / AnyAsFloat(EvalExpression(unWrapVec(vector<string>(str.begin() + 2, str.end())), variableValues));
|
||||
else
|
||||
LogWarning("unrecognized operator \'" + str[1] + "\'");
|
||||
return 0;
|
||||
LogWarning("uninitialized variable or typo in \'" + str[0] + "\'");
|
||||
return 1;
|
||||
}
|
||||
else if (IsVar(str[0], globalVariableValues))
|
||||
{
|
||||
if (str[1] == "=")
|
||||
globalVariableValues[str[0]] = EvalExpression(unWrapVec(vector<string>(str.begin() + 2, str.end())), variableValues);
|
||||
else if (str[1] == "+=")
|
||||
globalVariableValues[str[0]] = EvalExpression(str[0] + "+(" + unWrapVec(vector<string>(str.begin() + 2, str.end())) + ")", variableValues);
|
||||
else if (str[1] == "-=")
|
||||
globalVariableValues[str[0]] = AnyAsFloat(variableValues[str[0]]) - AnyAsFloat(EvalExpression(unWrapVec(vector<string>(str.begin() + 2, str.end())), variableValues));
|
||||
else if (str[1] == "*=")
|
||||
globalVariableValues[str[0]] = AnyAsFloat(variableValues[str[0]]) * AnyAsFloat(EvalExpression(unWrapVec(vector<string>(str.begin() + 2, str.end())), variableValues));
|
||||
else if (str[1] == "/=")
|
||||
globalVariableValues[str[0]] = AnyAsFloat(variableValues[str[0]]) / AnyAsFloat(EvalExpression(unWrapVec(vector<string>(str.begin() + 2, str.end())), variableValues));
|
||||
else
|
||||
LogWarning("unrecognized operator \'" + str[1] + "\'");
|
||||
return 0;
|
||||
}
|
||||
LogWarning("uninitialized variable or typo in \'" + str[0] + "\'");
|
||||
return 1;
|
||||
}
|
||||
|
||||
boost::any ProcessLine(const vector<vector<string>>& words, int lineNum, unordered_map<string, boost::any>& variableValues)
|
||||
@ -362,7 +370,7 @@ boost::any ProcessLine(const vector<vector<string>>& words, int lineNum, unorder
|
||||
|
||||
// Check existing variables: If matches, then it means
|
||||
// the variables value is getting changed with an operator
|
||||
else if (IsVar(words[lineNum][0], variableValues) || IsVar(words[lineNum][0], globalVariableValues))
|
||||
else if (count(words[lineNum][0], '.') == 0 && (IsVar(words[lineNum][0], variableValues) || IsVar(words[lineNum][0], globalVariableValues)))
|
||||
{
|
||||
// Evaluates what the operator (ex. '=', '+=') does to the value on the left by the value on the right
|
||||
varOperation(vector<string>(words[lineNum].begin(), words[lineNum].end()), variableValues);
|
||||
@ -370,7 +378,7 @@ boost::any ProcessLine(const vector<vector<string>>& words, int lineNum, unorder
|
||||
}
|
||||
|
||||
// Check existing variables: To see if class sub component matches
|
||||
else if (IsVar(split(words[lineNum][0], '.')[0], variableValues) || IsVar(split(words[lineNum][0], '.')[0], globalVariableValues))
|
||||
else if (count(words[lineNum][0], '.') > 0 && IsVar(split(words[lineNum][0], '.')[0], variableValues) || IsVar(split(words[lineNum][0], '.')[0], globalVariableValues))
|
||||
{
|
||||
// Evaluates what the operator (ex. '=', '+=') does to the value on the left by the value on the right
|
||||
varOperation(vector<string>(words[lineNum].begin(), words[lineNum].end()), variableValues);
|
||||
@ -380,7 +388,7 @@ boost::any ProcessLine(const vector<vector<string>>& words, int lineNum, unorder
|
||||
// Gathers while loop contents
|
||||
else if (words[lineNum][0] == "while")
|
||||
{
|
||||
vector<string> whileContents;
|
||||
vector<vector<string>> whileContents;
|
||||
vector<string> whileParameters;
|
||||
|
||||
for (int w = 1; w < (int)words[lineNum].size(); w++)
|
||||
@ -392,24 +400,16 @@ boost::any ProcessLine(const vector<vector<string>>& words, int lineNum, unorder
|
||||
numOfBrackets += countInVector(words[p], "{") - countInVector(words[p], "}");
|
||||
if (numOfBrackets == 0)
|
||||
break;
|
||||
whileContents.push_back("");
|
||||
for (int w = 0; w < (int)words[p].size(); w++)
|
||||
{
|
||||
whileContents[(int)whileContents.size() - 1] += words[p][w] + " ";
|
||||
}
|
||||
whileContents.push_back(words[p]);
|
||||
}
|
||||
whileContents = removeTabs(whileContents, 1);
|
||||
|
||||
vector<vector<string>> innerWords;
|
||||
for (int i = 0; i < (int)whileContents.size(); i++)
|
||||
innerWords.push_back(split(whileContents[i], ' '));
|
||||
whileContents = removeTabsWdArry(whileContents, 1);
|
||||
|
||||
while (BooleanLogic(whileParameters[0], whileParameters[1], whileParameters[2], variableValues))
|
||||
{
|
||||
//Iterate through all lines in while loop
|
||||
for (int lineNum = 0; lineNum < (int)whileContents.size(); lineNum++)
|
||||
{
|
||||
boost::any returnVal = ProcessLine(innerWords, lineNum, variableValues);
|
||||
boost::any returnVal = ProcessLine(whileContents, lineNum, variableValues);
|
||||
if (!returnVal.empty())
|
||||
return returnVal;
|
||||
}
|
||||
@ -420,7 +420,7 @@ boost::any ProcessLine(const vector<vector<string>>& words, int lineNum, unorder
|
||||
// Gathers if statement contents
|
||||
else if (words[lineNum][0] == "if")
|
||||
{
|
||||
vector<string> ifContents;
|
||||
vector<vector<string>> ifContents;
|
||||
vector<string> ifParameters;
|
||||
|
||||
for (int w = 1; w < (int)words[lineNum].size(); w++)
|
||||
@ -433,62 +433,54 @@ boost::any ProcessLine(const vector<vector<string>>& words, int lineNum, unorder
|
||||
numOfBrackets += countInVector(words[lineNum], "{") - countInVector(words[lineNum], "}");
|
||||
if (numOfBrackets == 0)
|
||||
break;
|
||||
ifContents.push_back("");
|
||||
for (int w = 0; w < (int)words[lineNum].size(); w++)
|
||||
{
|
||||
ifContents[(int)ifContents.size() - 1] += words[lineNum][w] + " ";
|
||||
}
|
||||
ifContents.push_back(words[lineNum]);
|
||||
lineNum++;
|
||||
}
|
||||
ifContents = removeTabs(ifContents, 1);
|
||||
|
||||
vector<vector<string>> innerWords;
|
||||
for (int i = 0; i < (int)ifContents.size(); i++)
|
||||
innerWords.push_back(split(ifContents[i], ' '));
|
||||
ifContents = removeTabsWdArry(ifContents, 1);
|
||||
|
||||
if (BooleanLogic(ifParameters[0], ifParameters[1], ifParameters[2], variableValues))
|
||||
{
|
||||
//Iterate through all lines in if statement
|
||||
for (int l = 0; l < (int)ifContents.size(); l++)
|
||||
{
|
||||
boost::any returnVal = ProcessLine(innerWords, l, variableValues);
|
||||
boost::any returnVal = ProcessLine(ifContents, l, variableValues);
|
||||
if (!returnVal.empty())
|
||||
return returnVal;
|
||||
}
|
||||
}
|
||||
else if (words.size() > lineNum + 1)
|
||||
if (words[lineNum + 1][0] == "else")
|
||||
{
|
||||
lineNum += 1;
|
||||
//else if (words.size() > lineNum + 1)
|
||||
// if (words[lineNum + 1][0] == "else")
|
||||
// {
|
||||
// lineNum += 1;
|
||||
|
||||
vector<string> elseContents;
|
||||
// vector<string> elseContents;
|
||||
|
||||
int numOfBrackets = 1;
|
||||
while (lineNum < (int)words.size())
|
||||
{
|
||||
numOfBrackets += countInVector(words[lineNum], "{") - countInVector(words[lineNum], "}");
|
||||
if (numOfBrackets == 0)
|
||||
break;
|
||||
elseContents.push_back("");
|
||||
for (int w = 0; w < (int)words[lineNum].size(); w++)
|
||||
{
|
||||
elseContents[(int)elseContents.size() - 1] += words[lineNum][w] + " ";
|
||||
}
|
||||
lineNum++;
|
||||
}
|
||||
elseContents = removeTabs(elseContents, 2);
|
||||
// int numOfBrackets = 1;
|
||||
// while (lineNum < (int)words.size())
|
||||
// {
|
||||
// numOfBrackets += countInVector(words[lineNum], "{") - countInVector(words[lineNum], "}");
|
||||
// if (numOfBrackets == 0)
|
||||
// break;
|
||||
// elseContents.push_back("");
|
||||
// for (int w = 0; w < (int)words[lineNum].size(); w++)
|
||||
// {
|
||||
// elseContents[(int)elseContents.size() - 1] += words[lineNum][w] + " ";
|
||||
// }
|
||||
// lineNum++;
|
||||
// }
|
||||
// elseContents = removeTabs(elseContents, 2);
|
||||
|
||||
vector<vector<string>> innerWords;
|
||||
for (int i = 0; i < (int)elseContents.size(); i++)
|
||||
innerWords.push_back(split(elseContents[i], ' '));
|
||||
// vector<vector<string>> innerWords;
|
||||
// for (int i = 0; i < (int)elseContents.size(); i++)
|
||||
// innerWords.push_back(split(elseContents[i], ' '));
|
||||
|
||||
//Iterate through all lines in else statement
|
||||
for (int lineNum = 0; lineNum < (int)elseContents.size(); lineNum++)
|
||||
{
|
||||
ProcessLine(innerWords, lineNum, variableValues);
|
||||
}
|
||||
return nullType;
|
||||
}
|
||||
// //Iterate through all lines in else statement
|
||||
// for (int lineNum = 0; lineNum < (int)elseContents.size(); lineNum++)
|
||||
// {
|
||||
// ProcessLine(innerWords, lineNum, variableValues);
|
||||
// }
|
||||
// return nullType;
|
||||
// }
|
||||
return nullType;
|
||||
}
|
||||
//// Gathers else statement contents
|
||||
@ -516,17 +508,16 @@ boost::any ExecuteFunction(const string& functionName, const vector<boost::any>&
|
||||
//Iterate through all lines in function
|
||||
for (int lineNum = 1; lineNum < (int)words.size(); lineNum++)
|
||||
{
|
||||
boost::any returnVal = 0;
|
||||
try
|
||||
{
|
||||
returnVal = ProcessLine(words, lineNum, variableValues);
|
||||
boost::any returnVal = ProcessLine(words, lineNum, variableValues);
|
||||
if (!returnVal.empty())
|
||||
return returnVal;
|
||||
}
|
||||
catch (const std::exception&)
|
||||
{
|
||||
LogCriticalError("\'" + unWrapVec(words[lineNum]) + "\'\n In function: " + functionName + "\n Line: " + to_string(lineNum));
|
||||
}
|
||||
if (!returnVal.empty())
|
||||
return returnVal;
|
||||
}
|
||||
return nullType;
|
||||
}
|
||||
|
||||
@ -129,6 +129,11 @@ boost::any EditClassSubComponent(boost::any value, string oper, boost::any other
|
||||
return nullType;
|
||||
}
|
||||
|
||||
bool AxisAlignedCollision(const Sprite& a, const Sprite& b)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
// Initial script processing, which loads variables and functions from builtin
|
||||
int GetBuiltins(const string& s)
|
||||
{
|
||||
@ -217,6 +222,8 @@ boost::any CPPFunction(const string& name, const vector<boost::any>& args)
|
||||
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.Math.Abs")
|
||||
return abs(AnyAsFloat(args[0]));
|
||||
else if (name == "CPP.Graphics.Init")
|
||||
{
|
||||
InterpreterLog("Init graphics");
|
||||
|
||||
@ -52,6 +52,27 @@ func Lerp(a, b, t)
|
||||
return out
|
||||
}
|
||||
|
||||
// Get absolute value of x
|
||||
func Abs(x)
|
||||
{
|
||||
float out = CPP.Math.Abs(x)
|
||||
return out
|
||||
}
|
||||
|
||||
// Convert radians to degrees
|
||||
func RadToDeg(x)
|
||||
{
|
||||
float out = (x * PI) / 180
|
||||
return out
|
||||
}
|
||||
|
||||
// Convert degrees to radians
|
||||
func DegToRad(x)
|
||||
{
|
||||
float out = (x * 180) / PI
|
||||
return out
|
||||
}
|
||||
|
||||
// Clamps input between min and max
|
||||
func Clamp(input, min, max)
|
||||
{
|
||||
|
||||
@ -349,7 +349,7 @@ class Sprite
|
||||
{
|
||||
public:
|
||||
Sprite(std::string path, Vec2 position, Vec2 scale, double angle)
|
||||
: position(position), angle(angle), path(path)
|
||||
: position(position), angle(angle), path(path), scale(scale)
|
||||
{
|
||||
rect.x = static_cast<int>(position.x);
|
||||
rect.y = static_cast<int>(position.y);
|
||||
@ -369,6 +369,7 @@ public:
|
||||
|
||||
int Draw()
|
||||
{
|
||||
rect.x = static_cast<int>(position.x);
|
||||
rect.y = static_cast<int>(position.y);
|
||||
SDL_RenderCopy(gRenderer, texture, NULL, &rect);
|
||||
return 0;
|
||||
@ -382,24 +383,30 @@ public:
|
||||
return position.x;
|
||||
if (componentName == "position.y")
|
||||
return position.y;
|
||||
if (componentName == "scale")
|
||||
return scale;
|
||||
if (componentName == "scale.x")
|
||||
return scale.x;
|
||||
if (componentName == "scale.y")
|
||||
return scale.y;
|
||||
}
|
||||
|
||||
Sprite EditSubComponent(std::string componentName, std::string oper, boost::any otherVal)
|
||||
{
|
||||
if (componentName == "position")
|
||||
{
|
||||
if(oper == "=")
|
||||
if (oper == "=")
|
||||
position = any_cast<Vec2>(otherVal);
|
||||
else if(oper == "+=")
|
||||
else if (oper == "+=")
|
||||
position += any_cast<Vec2>(otherVal);
|
||||
else if(oper == "-=")
|
||||
else if (oper == "-=")
|
||||
position -= any_cast<Vec2>(otherVal);
|
||||
else if(oper == "*=")
|
||||
else if (oper == "*=")
|
||||
position *= AnyAsFloat(otherVal);
|
||||
else if(oper == "/=")
|
||||
else if (oper == "/=")
|
||||
position /= AnyAsFloat(otherVal);
|
||||
}
|
||||
if (componentName == "position.x")
|
||||
else if (componentName == "position.x")
|
||||
{
|
||||
if (oper == "=")
|
||||
position.x = AnyAsFloat(otherVal);
|
||||
@ -412,7 +419,7 @@ public:
|
||||
else if (oper == "/=")
|
||||
position.x /= AnyAsFloat(otherVal);
|
||||
}
|
||||
if (componentName == "position.y")
|
||||
else if (componentName == "position.y")
|
||||
{
|
||||
if (oper == "=")
|
||||
position.y = AnyAsFloat(otherVal);
|
||||
@ -425,11 +432,53 @@ public:
|
||||
else if (oper == "/=")
|
||||
position.y /= AnyAsFloat(otherVal);
|
||||
}
|
||||
|
||||
else if (componentName == "scale")
|
||||
{
|
||||
if (oper == "=")
|
||||
scale = any_cast<Vec2>(otherVal);
|
||||
else if (oper == "+=")
|
||||
scale += any_cast<Vec2>(otherVal);
|
||||
else if (oper == "-=")
|
||||
scale -= any_cast<Vec2>(otherVal);
|
||||
else if (oper == "*=")
|
||||
scale *= AnyAsFloat(otherVal);
|
||||
else if (oper == "/=")
|
||||
scale /= AnyAsFloat(otherVal);
|
||||
}
|
||||
else if (componentName == "scale.x")
|
||||
{
|
||||
if (oper == "=")
|
||||
scale.x = AnyAsFloat(otherVal);
|
||||
else if (oper == "+=")
|
||||
scale.x += AnyAsFloat(otherVal);
|
||||
else if (oper == "-=")
|
||||
scale.x -= AnyAsFloat(otherVal);
|
||||
else if (oper == "*=")
|
||||
scale.x *= AnyAsFloat(otherVal);
|
||||
else if (oper == "/=")
|
||||
scale.x /= AnyAsFloat(otherVal);
|
||||
}
|
||||
else if (componentName == "scale.y")
|
||||
{
|
||||
if (oper == "=")
|
||||
scale.y = AnyAsFloat(otherVal);
|
||||
else if (oper == "+=")
|
||||
scale.y += AnyAsFloat(otherVal);
|
||||
else if (oper == "-=")
|
||||
scale.y -= AnyAsFloat(otherVal);
|
||||
else if (oper == "*=")
|
||||
scale.y *= AnyAsFloat(otherVal);
|
||||
else if (oper == "/=")
|
||||
scale.y /= AnyAsFloat(otherVal);
|
||||
}
|
||||
return *this;
|
||||
}
|
||||
|
||||
Vec2 position;
|
||||
Vec2 scale;
|
||||
double angle;
|
||||
|
||||
std::string path;
|
||||
SDL_Rect rect{};
|
||||
SDL_Texture* texture;
|
||||
@ -732,8 +781,8 @@ int initGraphics(std::string windowTitle, int width, int height)
|
||||
SDL_Init(SDL_INIT_VIDEO);
|
||||
TTF_Init();
|
||||
|
||||
gWindow = SDL_CreateWindow(windowTitle.c_str(), 40, 40, WINDOW_WIDTH, WINDOW_HEIGHT, SDL_WINDOW_SHOWN);
|
||||
gRenderer = SDL_CreateRenderer(gWindow, -1, 0, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC);
|
||||
gWindow = SDL_CreateWindow(windowTitle.c_str(), 40, 40, WINDOW_WIDTH, WINDOW_HEIGHT, SDL_WINDOW_SHOWN | SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC);
|
||||
gRenderer = SDL_CreateRenderer(gWindow, -1, 0);
|
||||
|
||||
//Get window surface
|
||||
gScreenSurface = SDL_GetWindowSurface(gWindow);
|
||||
|
||||
@ -4,7 +4,9 @@ int SCREENH = 600
|
||||
int scoreOne = 0
|
||||
int scoreTwo = 0
|
||||
|
||||
float paddleMoveSpeed = 200
|
||||
float ballSpeed = -3
|
||||
|
||||
float paddleMoveSpeed = 7
|
||||
|
||||
func Main(input, in)
|
||||
{
|
||||
@ -25,23 +27,29 @@ func Start()
|
||||
Vec2 lPaddlePosition = NVec2(15, yPosPaddle)
|
||||
global Vec2 lPaddleTargetPosition = NVec2(15, yPosPaddle)
|
||||
|
||||
float rOffset = SCREENW - 15
|
||||
float rOffset = SCREENW - (paddleScale.x + 15)
|
||||
Vec2 rPaddlePosition = NVec2(rOffset, yPosPaddle)
|
||||
global Vec2 rPaddleTargetPosition = NVec2(15, yPosPaddle)
|
||||
global Vec2 rPaddleTargetPosition = NVec2(rOffset, yPosPaddle)
|
||||
|
||||
global Sprite ballSprite = CPP.Graphics.Sprite("./square.png", ballPosition, ballScale, 0)
|
||||
global Sprite ballSpr = 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)
|
||||
|
||||
global Vec2 ballVelocity = NVec2(ballSpeed, 0)
|
||||
}
|
||||
|
||||
func Update(deltaTime)
|
||||
{
|
||||
//print deltaTime
|
||||
float FPS = 1 / deltaTime
|
||||
print "FPS: " + FPS
|
||||
|
||||
// Handles Left Paddle Movement
|
||||
//
|
||||
if GetKey("W") == true
|
||||
{
|
||||
float newX = lPaddle.position.x
|
||||
// Subtract from Y to move up, because vertical coordinates are reversed
|
||||
float newY = lPaddleTargetPosition.y - paddleMoveSpeed * deltaTime
|
||||
float newY = lPaddleTargetPosition.y - paddleMoveSpeed
|
||||
newY = Clamp(newY, 0, SCREENH - 70)
|
||||
lPaddleTargetPosition = NVec2(newX, newY)
|
||||
}
|
||||
@ -49,23 +57,86 @@ func Update(deltaTime)
|
||||
{
|
||||
float newX = lPaddle.position.x
|
||||
// Add to Y to move down, because vertical coordinates are reversed
|
||||
float newY = lPaddleTargetPosition.y + paddleMoveSpeed * deltaTime
|
||||
float newY = lPaddleTargetPosition.y + paddleMoveSpeed
|
||||
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 stopSpeed = deltaTime * 6
|
||||
float newY = lPaddleTargetPosition.y
|
||||
float lerpedY = Lerp(oldY, newY, stopSpeed)
|
||||
//print "0 < " + newY + " < " + SCREENH
|
||||
lPaddle.position = NVec2(newX, lerpedY)
|
||||
|
||||
print "FPS: " + 1 / deltaTime
|
||||
// Handles Right Paddle Movement
|
||||
//
|
||||
if GetKey("UP") == true
|
||||
{
|
||||
float newX = rPaddle.position.x
|
||||
// Subtract from Y to move up, because vertical coordinates are reversed
|
||||
float newY = rPaddleTargetPosition.y - paddleMoveSpeed
|
||||
newY = Clamp(newY, 0, SCREENH - 70)
|
||||
rPaddleTargetPosition = NVec2(newX, newY)
|
||||
}
|
||||
if GetKey("DOWN") == true
|
||||
{
|
||||
float newX = rPaddle.position.x
|
||||
// Add to Y to move down, because vertical coordinates are reversed
|
||||
float newY = rPaddleTargetPosition.y + paddleMoveSpeed
|
||||
newY = Clamp(newY, 0, SCREENH - 70)
|
||||
rPaddleTargetPosition = NVec2(newX, newY)
|
||||
}
|
||||
// Lerps from old position to destination smoothly
|
||||
float oldY = rPaddle.position.y
|
||||
float stopSpeed = deltaTime * 6
|
||||
float newY = rPaddleTargetPosition.y
|
||||
float lerpedY = Lerp(oldY, newY, stopSpeed)
|
||||
rPaddle.position = NVec2(newX, lerpedY)
|
||||
|
||||
ballSpr.position += ballVelocity
|
||||
|
||||
HandleBallBounce()
|
||||
|
||||
// Finally draws all of the sprites
|
||||
CPP.Graphics.Draw(ballSprite)
|
||||
CPP.Graphics.Draw(ballSpr)
|
||||
CPP.Graphics.Draw(lPaddle)
|
||||
CPP.Graphics.Draw(rPaddle)
|
||||
}
|
||||
|
||||
func HandleBallBounce()
|
||||
{
|
||||
float ballX = ballSpr.position.x
|
||||
float ballY = ballSpr.position.y
|
||||
// Checks if the ball is on the same X coordinate as the left paddle
|
||||
if ballX <= lPaddle.position.x
|
||||
{
|
||||
// Then check if ball is lower than the top edge
|
||||
float positionAdjustedOffset = lPaddle.position.y
|
||||
positionAdjustedOffset += lPaddle.scale.y
|
||||
if ballY <= positionAdjustedOffset
|
||||
{
|
||||
// Finally check if ball is higher than the bottom edge
|
||||
positionAdjustedOffset = lPaddle.position.y
|
||||
positionAdjustedOffset -= lPaddle.scale.y
|
||||
print positionAdjustedOffset
|
||||
if ballY >= positionAdjustedOffset
|
||||
{
|
||||
float difference = lPaddle.position.y
|
||||
difference -= ballY
|
||||
|
||||
// float normalizedRelativeIntersectionY = (difference/(lPaddle.scale.y/2))
|
||||
// float bounceAngle = normalizedRelativeIntersectionY * 1.3089
|
||||
|
||||
// float ballVx = ballSpeed*Cos(bounceAngle)
|
||||
// float ballVy = ballSpeed*-Sin(bounceAngle)
|
||||
|
||||
// // Reflect horizontally
|
||||
// if difference < 10
|
||||
// {
|
||||
// float newX = Sin(DegToRad())
|
||||
// ballVelocity
|
||||
// }
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -205,6 +205,26 @@ vector<string> removeTabs(const vector<string>& str, const int& amnt) {
|
||||
return newStr;
|
||||
}
|
||||
|
||||
vector<vector<string>> removeTabsWdArry(const vector<vector<string>>& str, const int& amnt) {
|
||||
vector<vector<string>> newWds;
|
||||
|
||||
for (int i = 0; i < (int)str.size(); i++)
|
||||
{
|
||||
//newWds.push_back(rangeInVec(str[i], amnt, -1));
|
||||
newWds.push_back(vector<string>());
|
||||
|
||||
for (int c = 0; c < (int)str[i].size(); c++)
|
||||
{
|
||||
if (str[i][c][0] != '\t' || c >= amnt)
|
||||
newWds[i].push_back(str[i][c]);
|
||||
else
|
||||
newWds[i].push_back(str[i][c].substr(1, -1));
|
||||
}
|
||||
}
|
||||
|
||||
return newWds;
|
||||
}
|
||||
|
||||
vector<string> rangeInVec(const vector<string>& str, const int& min, int max) {
|
||||
if (max == -1)
|
||||
max = (int)str.size();
|
||||
|
||||
@ -39,9 +39,11 @@ int countInVector(const vector<string>& str, const string& ch);
|
||||
|
||||
string Vec2Str(const vector<string>& str);
|
||||
|
||||
vector<vector<string>> removeTabsWdArry(const vector<vector<string>>& str, const int& amnt);
|
||||
|
||||
vector<string> removeTabs(const vector<string>& str, const int& amnt);
|
||||
|
||||
vector<string> rangeInVec(const vector<string>& str, const int& min, const int& max);
|
||||
vector<string> rangeInVec(const vector<string>& str, const int& min, int max);
|
||||
|
||||
vector<string> slice(vector<string> const& v, int min, int max);
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user