MediaWiki has been updated to version 1.35.1. Please report any problems here.

Changes

Jump to navigation Jump to search
m
cat
Line 96: Line 96:  
var window = canvas.Window.new([512,512],"dialog");
 
var window = canvas.Window.new([512,512],"dialog");
 
window.setCanvas(myCanvas);
 
window.setCanvas(myCanvas);
 +
</syntaxhighlight>
 +
 +
Here's another slightly-restructured version (untested), to better encapsulate the concept of a "managed texture" so that the code can be reused for other aircraft/purposes, e.g. for placing bullet holes etc:
 +
<syntaxhighlight lang="nasal">
 +
var ManagedTexture = {
 +
 +
# this create a new TextureManager object
 +
new: func(name, size, path) {
 +
# create a temporary object that inherits from TextureManager
 +
var m = {parents:[ManagedTexture]};
 +
 +
# Create a standalone Canvas (not attached to any GUI dialog/aircraft etc)
 +
m.canvas = canvas.new({
 +
"name": name, # The name is optional but allow for easier identification
 +
"size": [size[0], size[1]], # Size of the underlying texture (should be a power of 2, required) [Resolution]
 +
"view": [size[0], size[1]], # Virtual resolution (Defines the coordinate system of the canvas [Dimensions]
 +
                        # which will be stretched the size of the texture, required)
 +
"mipmapping": 1      # Enable mipmapping (optional)
 +
});
 +
 +
# create our top-level/root group that contains all other Canvas elements
 +
m.root = m.canvas.createGroup();
 +
 +
# hash with all layers/images added
 +
m.layers = {};
 +
m.basepath = path;
 +
 +
# return the new object to the caller
 +
return m;
 +
},
 +
 +
replaceTexture: func(name) {
 +
# Add a placement by replacing the textured face specified (name) in the 3D model
 +
# This replaces the texture on the aircraft and attaches the Canvas texture
 +
m.canvas.addPlacement({"node": name});
 +
},
 +
 +
addDynamicLayer: func(filename, callback=nil) {
 +
if(contains(layers, image)) print("Warning: replacing texture (added twice): ", image);
 +
# Put a raster image into the canvas and save the image in a hash: layers['EF2000.png].hide();
 +
m.layers[image] = root.createChild("image")
 +
    .setFile( m.basepath~image )
 +
    .setSize(2048,2048)
 +
return m.layers[image];
 +
},
 +
}; # of ManagedTexture
 +
 +
 +
# now, create a new managed texture, specifying the path to use for texture lookups
 +
var ExhaustDirt = ManagedTexture.new( name:"ExhaustDirt",
 +
size:[2048,2048],
 +
path:'Aircraft/EF2000/Models/' );
 +
 +
ExhaustDirt.replaceTexture('Fuselage');
 +
 +
# Create a Canvas dialog window to hold the canvas and show that it's working
 +
# the Canvas is now standalone, i.e. continues to live once the dialog is closed!
 +
var window = canvas.Window.new([512,512],"dialog");
 +
window.setCanvas(ExhaustDirt.canvas);
 +
 +
foreach(var layer; [ {file:'EF2000.png'},
 +
{file:'EF2000-dirt.png'} ]) {
 +
ExhaustDirt.addDynamicLayer(layer.file);
 +
}
 +
 +
 +
var timer_hide = maketimer(3.0, func() {
 +
  ExhaustDirt.layers['EF2000-dirt.png'].hide();
 +
});
 +
 +
var timer_show = maketimer(5.0, func() {
 +
  ExhaustDirt.layers['EF2000-dirt.png'].show();
 +
});
 +
 +
# start those two timers to hide/show the dirt texture with 2 second delays
 +
timer_hide.start();
 +
timer_show.start();
 +
 
</syntaxhighlight>
 
</syntaxhighlight>
   Line 247: Line 325:  
   }}
 
   }}
 
}}
 
}}
 +
 +
[[Category:Canvas]]
 +
[[Category:Aircraft enhancement]]

Navigation menu