public override ILineObject Generate(GenerationEnvironment env) { var funcName = env.GenerateActionAsActorInit(ActionName); var dir = ThisExpr.Instance.MakeIndex("direction"); if (Direction == CreateBulletDirection.Opposite) { dir = new UnOpExpr(dir, UnOpExpr.Op.Sub); } return(new SimpleBlock(new ILineObject[] { //create t new SimpleLineObject("local t = this.DefaultShotTable();"), //set parent actor new SimpleLineObject("t.flag1 = { wr = this.weakref() };"), //TODO setup t //create actor ThisExpr.Instance.MakeIndex("world2d").MakeIndex("CreateActor").Call( Position.GenerateX(ThisExpr.Instance, env), Position.GenerateY(ThisExpr.Instance, env), dir, ThisExpr.Instance.MakeIndex("u").MakeIndex("uu").MakeIndex("uuu").MakeIndex(funcName), new IdentifierExpr("t") ).Statement(), //clear actor reference (safety) new SimpleLineObject("t.flag1 = null;"), }).Statement()); }
public override ILineObject Generate(GenerationEnvironment env) { var funcName = env.GenerateActionAsActorInit(Action); return(ThisExpr.Instance.MakeIndex("hitEffect").Assign( ThisExpr.Instance.MakeIndex("u").MakeIndex("uu").MakeIndex("uuu").MakeIndex(funcName)).Statement()); }