private static void ParseAsteroidType(string path) { lua = new Lua(); Type classType = typeof(HWData); lua.RegisterFunction("StartAsteroidConfig", null, classType.GetMethod("StartAsteroidConfig")); lua.RegisterFunction("setCollisionDamageToModifier", null, classType.GetMethod("SetCollisionDamageToModifier")); lua.RegisterFunction("setCollisionDamageFromModifier", null, classType.GetMethod("SetCollisionDamageFromModifier")); lua.RegisterFunction("SpawnAsteroidOnDeath", null, classType.GetMethod("SpawnAsteroidOnDeath")); lua.RegisterFunction("resourceAttackMode", null, classType.GetMethod("ResourceAttackMode")); lua.DoFile(path); string name = Path.GetFileNameWithoutExtension(path).ToLower(); Vector4 pixelColor = Vector4.Zero; float resourceValue = 0; foreach (KeyValuePair <object, object> de in asteroidConfig) { switch (de.Key.ToString()) { case "pixelColour": pixelColor = LuaMap.LuaTableToVector4((LuaTable)de.Value); break; case "resourceValue": string text = de.Value.ToString(); text = text.Replace(",", "."); resourceValue = float.Parse(text, InvariantCulture); break; } } AsteroidType existingType = null; foreach (AsteroidType type in AsteroidType.AsteroidTypes) { if (type.Name == name) { existingType = type; break; } } //Check if a type with that name already exists (because of multiple data paths) if (existingType == null) { new AsteroidType(name, pixelColor, resourceValue); } else { //Overwrite existing style existingType.Name = name; existingType.PixelColor = pixelColor; existingType.ResourceValue = resourceValue; } }
public Asteroid(AsteroidType type, Vector3 position, Vector3 rotation, float multiplier, float rotSpeed) : base(position, rotation) { Mesh = new Mesh(position, rotation, Mesh.Asteroid); Multiplier = multiplier; RotSpeed = rotSpeed; Type = type; Asteroids.Add(this); AllowRotation = true; }
public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value) { if (value is string) { AsteroidType type = AsteroidType.GetTypeFromName((string)value); if (type != null) { return(type); } else { return(AsteroidType.AsteroidTypes[0]); } } return(base.ConvertFrom(context, culture, value)); }
public Asteroid() : base(Vector3.Zero, Vector3.Zero) { if (lastType != null) { type = lastType; } else { type = AsteroidType.AsteroidTypes[0]; } Mesh = new Mesh(Vector3.Zero, Vector3.Zero, Mesh.Asteroid); Type = type; Multiplier = lastMultiplier; RotSpeed = lastRotSpeed; Asteroids.Add(this); AllowRotation = true; }
public static void AddAsteroid(string type, LuaTable position, float multiplier, float rotX, float rotY, float rotZ, float rotSpeed) { //Log.WriteLine("Adding asteroid \"" + type + "\"."); Vector3 pos = LuaTableToVector3(position); Vector3 rot = Vector3.Zero; rot.X = rotX; rot.Y = rotY; rot.Z = rotZ; string newType = type.ToLower(); AsteroidType asteroidType = AsteroidType.GetTypeFromName(newType); if (asteroidType == null) { new Problem(ProblemTypes.WARNING, "Asteroid type \"" + newType + "\" not found. Skipping asteroid."); return; } new Asteroid(asteroidType, pos, rot, multiplier, rotSpeed); }