add support for marble attribute changing

This commit is contained in:
RandomityGuy 2025-02-07 14:38:16 +05:30
parent 1e18d0f844
commit 7a7756ca3a
3 changed files with 36 additions and 1 deletions

View file

@ -1,5 +1,6 @@
package src;
import mis.MisParser;
import triggers.Trigger;
import net.Net;
import gui.MarbleSelectGui;
@ -580,6 +581,8 @@ class Marble extends GameObject {
worker.addTask(fwd -> level.addDtsObject(this.helicopter, fwd));
worker.addTask(fwd -> level.addDtsObject(this.megaHelicopter, fwd));
worker.run();
loadMarbleAttributes();
}
function buildShadowVolume() {
@ -661,6 +664,36 @@ class Marble extends GameObject {
shadowVolume.setRotationQuat(q);
}
function loadMarbleAttributes() {
var attribs = this.level.mission.marbleAttributes;
if (attribs.exists("maxrollvelocity"))
this._maxRollVelocity = MisParser.parseNumber(attribs.get("maxrollvelocity"));
if (attribs.exists("angularacceleration"))
this._angularAcceleration = MisParser.parseNumber(attribs.get("angularacceleration"));
if (attribs.exists("jumpimpulse"))
this._jumpImpulse = MisParser.parseNumber(attribs.get("jumpimpulse"));
if (attribs.exists("kineticfriction"))
this._kineticFriction = MisParser.parseNumber(attribs.get("kineticfriction"));
if (attribs.exists("staticfriction"))
this._staticFriction = MisParser.parseNumber(attribs.get("staticfriction"));
if (attribs.exists("brakingacceleration"))
this._brakingAcceleration = MisParser.parseNumber(attribs.get("brakingacceleration"));
if (attribs.exists("gravity"))
this._gravity = MisParser.parseNumber(attribs.get("gravity"));
if (attribs.exists("airaccel"))
this._airAccel = MisParser.parseNumber(attribs.get("airaccel"));
if (attribs.exists("maxdotslide"))
this._maxDotSlide = MisParser.parseNumber(attribs.get("maxdotslide"));
if (attribs.exists("minbouncevel"))
this._minBounceVel = MisParser.parseNumber(attribs.get("minbouncevel"));
if (attribs.exists("minbouncespeed"))
this._minBounceSpeed = MisParser.parseNumber(attribs.get("minbouncespeed"));
if (attribs.exists("mintrailvel"))
this._minTrailVel = MisParser.parseNumber(attribs.get("mintrailvel"));
if (attribs.exists("bouncekineticfriction"))
this._bounceKineticFriction = MisParser.parseNumber(attribs.get("bouncekineticfriction"));
}
function findContacts(collisiomWorld:CollisionWorld, timeState:TimeState) {
this.contacts = queuedContacts;
CollisionPool.clear();

View file

@ -43,6 +43,7 @@ class Mission {
public var isCustom:Bool;
public var gameMode:String;
public var addedAt:Int64;
public var marbleAttributes:Map<String, String>;
var next:Mission;
@ -66,6 +67,7 @@ class Mission {
var misParser = new MisParser(misText);
var contents = misParser.parse();
root = contents.root;
marbleAttributes = contents.marbleAttributes;
function scanMission(simGroup:MissionElementSimGroup) {
for (element in simGroup.elements) {

View file

@ -67,7 +67,7 @@ class MisParser {
startText = outsideText;
while (marbleAttributesRegEx.match(startText)) {
marbleAttributes.set(marbleAttributesRegEx.matched(1), this.resolveExpression(marbleAttributesRegEx.matched(2)));
marbleAttributes.set(marbleAttributesRegEx.matched(1).toLowerCase(), this.resolveExpression(marbleAttributesRegEx.matched(2)));
startText = marbleAttributesRegEx.matchedRight();
}